2

Python で実行されている Linux コマンドがあります。

roc = subprocess.Popen(['sshpass', '-p', password, 'rsync', '-avz', '--info=progress2', hostname, '/home/zurelsoft/test'], 
                                    stderr=subprocess.PIPE, stdout=subprocess.PIPE).communicate()[0]
print roc

これは、実行が終了したときにのみコマンド処理を出力します。しかし、コマンドが完全に実行されると停止し、コマンドの出力が必要です。それはどのように行うことができますか?

4

2 に答える 2

3

Select andSelectExampleチェックアウトできます

Python’s select()関数は、基盤となるオペレーティングシステムの実装への直接のインターフェイスです。ソケット、開いているファイル、およびパイプ(有効なファイル記述子を返すfileno()メソッドを持つもの)を、読み取りまたは書き込み可能になるまで、または通信エラーが発生するまで監視します。

select()同時に複数の接続を監視するのが簡単になり、監視はインタープリターではなくオペレーティングシステムのネットワーク層で行われるため、ソケットタイムアウトを使用してPythonでポーリングループを作成するよりも効率的です。

これが役に立たない場合は、

永続的なPythonサブプロセス

subprocess.Popen.stdout(ノンブロッキング)から利用可能なすべてのデータを読み取るにはどうすればよいですか?

于 2012-12-19T05:55:30.190 に答える
0

This should work from commandline if you call it via subprocess.Popen as you do, but pass a pipe to sys.stdout by changing:

 stdout=sys.stdout

Passing a pipe to an open, writable file object saves the output.

out = open("output.tmp","w")
subprocess.Popen(["ls","-R"],stdout = out)
out = open("output.tmp","r")
output = out.readlines()
于 2012-12-19T10:35:39.947 に答える