3
import ftplib
server = '192.168.1.109'
user = 'bob'
password = 'likes_sandwiches'

box = ftplib.FTP(server)
box.login(user, password)

s = box.mkd('\\a\\this4\\')
box.close()

x = raw_input('done, eat sandwiches now')

これは以下を返します:

トレースバック (最新の呼び出しが最後): File "C:\scripts\ftp_test.py", line 25, in s = box.mkd('\E\this4\') File "C:\Python26\lib\ftplib.py ", 行 553, mkd return parse257(resp) File "C:\Python26\lib\ftplib.py", 行 651, in parse257 raise error_reply, resp error_reply: 250 ディレクトリが正常に作成されました。

ディレクトリは正常に作成されましたが、エラーと見なされます。なんてこと?

ループで多くのディレクトリを作成する予定ですが、単一のディレクトリが正常に作成されるたびに壊れないようにするにはどうすればよいですか?

4

2 に答える 2

1

RFC 959 (FTP)によると、MKDに対する唯一の有効な応答コードは257です。これは、FTPサーバーが標準に準拠していないことが原因で発生した問題のようです。

あなたの興味のために、これは関連するftplibコードです:

if resp[:3] != '257':
    raise error_reply, resp
于 2010-08-11T21:41:08.260 に答える
1

ftplib「作成済み」として定義された 257 の結果が期待されているため、を解析し<pathname>て返すことができます。しかし、サーバーは驚くべきことに 250 の結果を返し、パス名を返さないため、mkdメソッドはもちろん失敗します。

この特異なサーバーの動作の回避策として、voidcmdMKD /your/pathを使用してコマンドを送信するだけで済みます。作成するパス名は絶対パスであるため、作成したいパス名はわかっています。

于 2010-08-11T21:49:08.997 に答える