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

War es hilfreich?

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 interpolieren

Edit 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)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top