0

これは宿題の質問からのものですが、私は Python にあまり詳しくなく、以下のステートメントで何が起こっているのかについての情報を見つけることができませんでした。

 message = connectionSocket.recvfrom(1024)
 filename = message.split()[1] 
 f = open(filename[1:]) 

したがって、メッセージは、connectionSocket に接続されたクライアントからデータを取得し、それをメッセージに入れるだけです。そこから、メッセージが分割されていることがわかります。つまり、メッセージ内の文字列を取得し、単語のリストを返します (区切り文字は単なるスペースだと思います)。しかし、それは何ですか [1]?

これは Web サーバーであるはずなので、serverAddress:serverPort/HelloWorld.html に移動すると、メッセージは 'HelloWorld.html" の部分ですよね? その後、ファイルを開いているというようなシナリオを考えています。 [1] と [1:] の目的に迷っています。

4

1 に答える 1

1
filename = message.split()[1]

messageの文字列が分割され、単語のリストとして返されると(正しく) 推測しました。

これが HTTP リクエストの場合、最初の 1024 バイトは次のmessageようになります。

"GET /file.html cruft..."または"GET /path/file.html cruft..."

このsplit文字列を ting すると、次のリストが生成されます。

["GET", "/file.html", "cruft..."].

[1] は、リスト内でインデックス [1] が付けられた要素、つまり 2 番目の要素を示し、最初のインデックス位置は [0] です。だからfilename="/file.html"または="/directory/subdirectory/file.html"


f = open(filename[1:]) 

filenameこれは、再びインデックスを使用して、 にあるものをすべてスライスします。filename[1:] は、[1] から最後までのすべての要素を返します。上記の仮定が正しければ、先頭/を破棄してファイルを開くことができます。

于 2013-10-20T22:00:41.077 に答える