2011-12-03 16 views
2

私はwgetコマンドをソケット経由でリモートサーバーに送信しています。ここで がクライアントコードです:サーバーPythonでソケット経由で同期wgetコマンドを送信

import socket 
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect(('192.168.1.16',12345)) 
s.send('wget http://url/file1') 
print "file 1 OK" 
s.send('wget http://url/file2') 
print "file 2 OK" 
s.send('wget http://url/file3') 
print "file 3 OK" 
s.close() 

次のように、コードは次のとおりです。

#!/usr/bin/env python 
import socket 
import subprocess 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind(('', 12345)) 
s.listen(1) 
conn, addr = s.accept() 
while True: 
    data = conn.recv(1024) 
    cmd = ['/bin/sh', '-c', data] 
    proc = subprocess.Popen(cmd, stdout=subprocess.PIPE).wait() 

私は2つの問題を抱えています。サーバーに送信され

  1. 手順をグループ化されます。 3つの命令を有する代わりに、サーバは3つの命令の連結である1​​だけを受け取る。
  2. サーバが完了していない間に、すぐに「File n OK」が表示される。

ファイルごとにダウンロードが完了したら「OK」が表示されるようにするにはどうすればよいですか? ご協力いただきありがとうございます。

+0

なぜwgetのではなく、純粋なのpython? – akira

答えて

2

私はちょうど昨日similar problemを持っていました。サーバーが「完了しました」という信号を送るには、何らかの方法が必要です。

クライアントコードでは、サーバーの準備ができるまで待つ必要があります。この単純なプロトコルでは、「私は終わった」という意味です。必要に応じてさらにエラーチェックを行うことができます。

s.send('wget http://url/file1') 
print "file 1 OK" 
s.recv(1024) # Wait for ANY response 
s.send(.... 

とサーバーのコード...

while True: 
    data = conn.recv(1024) 
    cmd = ['/bin/sh', '-c', data] 
    proc = subprocess.Popen(cmd, stdout=subprocess.PIPE).wait() 
    conn.send('done') # Send something, ANYTHING 
# EOF 
+0

FakeRainBrigandさん、ありがとうございます。完璧です。今それは動作します。 –

関連する問題