2013-02-14 14 views
1
name = raw_input() 
    ftp = FTP("") 
    ftp.login('','') #These work fine 
    ftp.storbinary("STOR", "%s.txt" % (name)) # I think the issue is here 
    ftp.quit() 

該程序總是崩潰,因爲它到達這個部分,我GOOGLE了,無法找到答案,我甚至嘗試只輸入文件的名稱,但具有相同的結果。ftplib.error_pern 501沒有文件名?

我在做什麼錯?

回答

1

如果你看看docsstorbinary方法的形式爲('STOR filename', <file_object>)。上面的問題是,您沒有完整的STOR命令作爲您的第一個(command)參數。既然你需要傳遞一個打開的文件句柄爲file的說法,你可以嘗試這樣的:

ftp.storbinary("STOR %s.txt" % (name), open("%s.txt" % name, 'rb')) 

這會從raw_input創建基於名稱的打開文件處理程序(如你接受輸入,你」 d也想警惕惡意輸入)。假設你搞定,上下文管理器可用於打開該文件(並確保它關閉):

my_file = "%s.txt" % name 
with open(my_file, "rb") as f: 
    ftp.storbinary("STOR %s" % (my_file), f) 
+0

謝謝! 一些python文檔讓新手感到困惑:) – AB49K 2013-02-14 15:22:48

+0

@AndrewBerry完全沒問題,也不用擔心 - 隨着時間的推移,它們會變得更有意義:)祝你好運。 – RocketDonkey 2013-02-14 15:24:04

0

看起來你需要更多的只是「STOR」作爲第一個參數。

FTP.storbinary(命令,文件[,塊大小,回調,其餘])

店鋪在二進制傳輸模式的文件。命令應該是一個適當的STOR命令:「STOR文件名」。文件是一個打開的文件對象,直到EOF使用它的read()方法以塊大小塊來提供要存儲的數據爲止讀取。 blocksize參數默認爲8192. callback是一個可選的單個參數callable,它在發送後會在每個數據塊上調用。休息意味着與transfercmd()方法中的相同。