IOError Öffnen Sie eine vorhandene Datei mit Python
Frage
Ausführen des folgenden Code:
import os
import datetime
import ftplib
currdate = datetime.datetime.now()
formatdate = currdate.strftime("%m-%d-%Y %H%M")
def log():
fqn = os.uname()[1]
ext_ip = urllib2.urlopen('http://whatismyip.org').read()
log = open ('/Users/admin/Documents/locatelog.txt','w')
log.write(str("Asset: %s " % fqn))
log.write(str("Checking in from IP#: %s" % ext_ip))
smush = str(fqn +' @ ' + formatdate)
os.rename('/Users/admin/Documents/locatelog.txt','/Users/admin/Documents/%s.txt' % smush )
s = ftplib.FTP('10.7.1.71','username','password')
f = open('/Users/admin/Documents/%s.txt' % smush,'r')
s.storbinary("STOR /Users/admin/Documents/%s.txt" % smush,f)
Erzeugt die folgenden Fehler:
ftplib.error_perm: 550 /Users/admin/Documents/678538.local @ 02-24-2010 1301.txt: No such file or directory
Ich habe das Gefühl, etwas nicht stimmt in dieser Linie ist:
s.storbinary("STOR /Users/admin/Documents/%s.txt" % smush,f)
678.538 ist der Host auf das ich teste ... mit Mac OS X 10.5 und Python 2.5.1
Lösung 3
Edit:
Diese Version funktioniert. Das Problem war, dass ich in den Puffer geschrieben hatte, und nicht auf Datei
import os
import urllib2
import datetime
import ftplib
currdate = datetime.datetime.now()
formatdate = currdate.strftime("%m-%d-%Y-%H%M")
def log():
fqn = os.uname()[1]
ext_ip = urllib2.urlopen('http://whatismyip.org').read()
smush = str(fqn + formatdate)
s = ftplib.FTP('10.7.1.71','username','password')
f = open('/Users/admin/Documents/%s.txt' % smush,'w')
f.write(str("Asset: %s " % fqn))
f.write('\n')
f.write(str("Checking in from IP#: %s" % ext_ip))
f.write('\n')
f.write(str("On: %s" % formatdate))
f.close
f = open('/Users/admin/Documents/%s.txt' % smush,'rb')
s.storbinary('STOR %s.txt' % smush , f)
s.close
f.close
Andere Tipps
sollte nicht bef = open('/Users/admin/Documents/%s.txt' % smush,'r')
es? Beachten Sie die /
vor Users
Wenn Sie die erste /
setzen tun sie nicht, wird denken, das Skript den Pfad zur Datei in das aktuelle Verzeichnis ist relativ (in dem das Skript aus ausgeführt wird)
Bearbeiten :
Ich bin nicht allzu vertraut mit Python (ich wünsche), aber soll es nicht sein:
s.storbinary('STOR /Users/admin/Documents/%s.txt' % smush,f)
?
In Ihrem Beispiel Python wird die Zeichenfolge als wörtliche behandeln und Sie wollen den Wert von smush mit% s
zu interpolierenEdit 2 :
Ist das Verzeichnis /Users/admin/Documents/
exist auf Ihrem Server? Wenn nicht, ich glaube, Sie sie vor dem Kopieren nichts zu schaffen haben. (Da die Fehlermeldung über einige Dateien / Ordner fehlt).
Sie können sie sich zuerst erstellen. Führen Sie Ihren Skript. Wenn die Datei erfolgreich kopiert wird, dann können Sie die Erstellung der Verzeichnisse aus Ihrem Skript hinzuzufügen.
entfernen Sie alle Leerzeichen aus Dateinamen .eg in smush = str(fqn +' @ ' + formatdate)
, Sie setzen einen Platz vor und nach dem „@“. Sie Pfad sieht aus wie
/Users/admin/Documents/something @ something
und wenn Sie es ftplib passieren, kann es Problem. eine andere Möglichkeit ist, zu versuchen Anführungszeichen setzen, zB
s.storbinary("STOR '/Users/admin/Documents/%s.txt'" % smush,f)