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

Shouldn't it bef = open('/Users/admin/Documents/%s.txt' % smush,'r') ? notice the / in front of Users

If you dont put the first /, the script will think the path to the file is relative to the current directory (where the script is run from)

Edit:

I m not too familiar with Python (I wish) but shouldnt it be:

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

In your example, Python will treat your string as literal and you want to interpolate the value of smush with %s

Edit 2:

Does the directory /Users/admin/Documents/ exist on your server? If not, I think you will have to create them before copying anything. (Since the error message is about some files/folders missing).

You can create them yourself first. Run your script. If the file is copied successfully, then you can add the creation of the directories from within your script.

于 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 に答える