IOError abrir un archivo existente con Python
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
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)