Pregunta

Al ejecutar el siguiente código:

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)

genera el error siguiente:

ftplib.error_perm: 550 /Users/admin/Documents/678538.local @ 02-24-2010 1301.txt: No such file or directory

Tengo la sensación de que algo está mal en esta línea:

s.storbinary("STOR /Users/admin/Documents/%s.txt" % smush,f)

678 538 es el anfitrión que estoy probando en ... usando Mac OS X 10.5 y Python 2.5.1

¿Fue útil?

Solución 3

Editar

Esta versión funciona:. El problema era que estaba escribiendo para amortiguar, y no al archivo

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

Otros consejos

¿No debería bef = open('/Users/admin/Documents/%s.txt' % smush,'r')? notar la / frente a Users

Si usted no pone la primera /, el script se piensa que la ruta de acceso al archivo es relativa al directorio actual (donde la secuencia de comandos se ejecuta desde)

Editar

No estoy muy familiarizado con Python (deseo), pero no debería ser que:

s.storbinary('STOR /Users/admin/Documents/%s.txt' % smush,f)?

En su ejemplo, Python tratará su cadena como literal y que desea interpolar el valor de smush con% s

Editar 2 :

¿La existir /Users/admin/Documents/ directorio de su servidor? Si no es así, creo que tendrá que crearlas antes de copiar nada. (Dado que el mensaje de error es de aproximadamente unos archivos / carpetas que faltan).

Puede crear su propia cuenta en primer lugar. Ejecutar la secuencia de comandos. Si el archivo es copiado con éxito, entonces se puede añadir la creación de los directorios desde el interior de la secuencia de comandos.

eliminar todos los espacios de nombre de archivo .eg en smush = str(fqn +' @ ' + formatdate), usted está poniendo un espacio delante y después de "@". Ruta le parece a

/Users/admin/Documents/something @ something

y cuando se le pasa a ftplib, puede tener un problema. otra forma es tratar de poner comillas, por ejemplo

s.storbinary("STOR '/Users/admin/Documents/%s.txt'" % smush,f)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top