运行以下代码:
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)
生成以下错误:
ftplib.error_perm: 550 /Users/admin/Documents/678538.local @ 02-24-2010 1301.txt: No such file or directory
我觉得这句话有些不对劲:
s.storbinary("STOR /Users/admin/Documents/%s.txt" % smush,f)
678538是我正在测试的主机...使用Mac OS X 10.5和Python 2.5.1
答案 0 :(得分:5)
不应该是f = open('/Users/admin/Documents/%s.txt' % smush,'r')
吗?注意/
Users
如果您没有放置第一个/
,脚本会认为该文件的路径是相对于当前目录(运行脚本的位置)
修改强>:
我不太熟悉Python(我希望)但不应该是:
s.storbinary('STOR /Users/admin/Documents/%s.txt' % smush,f)
?
在您的示例中,Python会将您的字符串视为文字,并且您希望使用%s插入smush的值
编辑2 :
您的服务器上是否存在目录/Users/admin/Documents/
?如果没有,我认为你必须在复制之前创建它们。 (由于错误消息是关于某些文件/文件夹丢失的。)
您可以先自己创建它们。运行你的脚本。如果成功复制了文件,则可以在脚本中添加目录的创建。
答案 1 :(得分:1)
从smush = str(fqn +' @ ' + formatdate)
中删除文件名.eg中的所有空格,在“@”之前和之后放置一个空格。你的路径看起来像
/Users/admin/Documents/something @ something
当你将它传递给ftplib时,它可能有问题。另一种方法是尝试引用引号,例如
s.storbinary("STOR '/Users/admin/Documents/%s.txt'" % smush,f)
答案 2 :(得分:0)
修改:
这个版本有效:问题是我写的是缓冲区,而不是文件。
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