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()

この部分に到達すると、プログラムは常にクラッシュします。ググって答えを見つけることができませんでした。ファイルの名前を入力してみましたが、結果は同じでした。

私は何を間違っていますか?

4

2 に答える 2

1

ドキュメントを見ると、storbinaryメソッドはの形式を取ります('STOR filename', <file_object>)。上記の問題は、最初の( )引数STORとして完全なコマンドがないことです。command引数として開いているファイルハンドラーを渡す必要があるため、次のfileように試すことができます。

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

これにより、fromの名前に基づいてオープンファイルハンドラーが作成さraw_inputれます(入力を受け入れるため、悪意のある入力にも注意する必要があります)。あなたがそれを処理すると仮定すると、コンテキストマネージャを使用してファイルを開く(そしてファイルを確実に閉じる)ことができます:

my_file = "%s.txt" % name
with open(my_file, "rb") as f:
    ftp.storbinary("STOR %s" % (my_file), f)
于 2013-02-14T15:12:43.267 に答える
0

最初の引数として「STOR」だけが必要なようです。

FTP.storbinary(コマンド、ファイル[、ブロックサイズ、コールバック、残り])

バイナリ転送モードでファイルを保存します。command は適切な STOR コマンドである必要があります: "STOR filename"。file は、保存するデータを提供するサイズ blocksize のブロックで read() メソッドを使用して EOF まで読み取られるオープン ファイル オブジェクトです。blocksize 引数のデフォルトは 8192 です。 callback は、データの送信後に各データ ブロックで呼び出されるオプションの単一パラメータ callable です。rest は transfercmd() メソッドと同じ意味です。

于 2013-02-14T15:13:43.417 に答える