2010-02-24 20 views
0

運行下面的代碼:IO錯誤打開現有的文件與Python

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

編輯:

這個版本的作品:問題是,我在寫緩衝,而不是文件。

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 
5

是不是應該是f = open('/Users/admin/Documents/%s.txt' % smush,'r')?注意到的Users

如果你不把第一/,腳本會認爲文件路徑是相對於當前目錄(其中腳本是從運行)

編輯前面/

我不是太熟悉Python(我願意),但不應該說,它是:

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

在你的榜樣,Python會對待你的字符串作爲文字和要插值斯馬什與價值%S

編輯2

請問您的服務器上的目錄/Users/admin/Documents/存在嗎?如果沒有,我認爲你必須在複製任何東西之前創建它們。 (由於錯誤消息是關於一些文件/文件夾丟失)。

您可以先自己創建它們。運行你的腳本。如果文件複製成功,則可以在腳本中添加目錄的創建。

+0

'全部'來源顯示/,但是一行不行。它會顯示片段是正在運行的,但是完整的源代碼是期望的。 – KevinDTimm

+0

@ ccheneson謝謝..我沒有忘記這個斜槓,但是我的另一個錯誤是用ftplib命令..似乎是做同樣的事情? (我編輯的問題,以反映變化) – cit

+0

@skylarking:看我的編輯 – ccheneson

1

刪除smush = str(fqn +' @ ' + formatdate)中的文件名.eg中的所有空格,則在「@」之前和之後放置一個空格。你的路徑看起來像

/Users/admin/Documents/something @ something 

當你將它傳遞給ftplib時,它可能有問題。另一種方法是嘗試把引號,如

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