0

运行以下代码:

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

4

3 回答 3

4

不应该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/您的服务器上是否存在该目录?如果没有,我认为您必须在复制任何内容之前创建它们。(因为错误消息是关于一些文件/文件夹丢失)。

您可以先自己创建它们。运行你的脚本。如果文件复制成功,那么您可以从脚本中添加目录的创建。

于 2010-02-24T17:24:05.120 回答
1

从文件名中删除所有空格。smush = str(fqn +' @ ' + formatdate)例如,在“@”之前和之后放置一个空格。你的路径看起来像

/Users/admin/Documents/something @ something

当你将它传递给 ftplib 时,它可能有问题。另一种方法是尝试加上引号,例如

s.storbinary("STOR '/Users/admin/Documents/%s.txt'" % smush,f)
于 2010-02-24T18:33:48.217 回答
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
于 2010-02-24T18:49:22.400 回答