2016-06-02 2 views
0

私はPythonを初めて使い、コマンドラインプロンプトやファイルから独自のコマンドを受け取り、特定の機能を実行するエンジンを与えられました)。私はPythonでサブプロセスしたい。Python 2.7のサブプロセス - エンジンにコマンドを発行する

subprocess.call(path, shell=True)でエンジンを開き、手動で入力コマンドと対話できますが、出力を自動的に表示するために、Pythonを介してエンジンに入力する独自のコマンドをスクリプト化する方法がわかりません。私はすべてのドキュメントを理解しようとしましたが、それほど冗長です。

理想的には、Pythonですべての入力コマンドをスクリプト化し、エンジンのサブプロセスを行い、Python出力で自分のエンジンの出力を確認したいと考えています。

もう一度、この音が混乱していると私を許してください。たとえば、私は試しました:

p = subprocess.Popen(path-to-engine, stdin = subprocess.PIPE, stdout = subprocess.PIPE, shell=True) 
p.stdin.write("some commands") 
p.stdout.readline() 
p.kill() 

しかし、これはちょうど私に終了コード0を与え、出力はありません。

答えて

0

あなたは.communicate()の代わり.kill()使用する必要があります:あなたの答えのための

import subprocess 
p = subprocess.Popen(
    path_to_engine, 
    stdin=subprocess.PIPE, 
    stdout=subprocess.PIPE, 
    stderr=subprocess.PIPE, 
    shell=True) 
p.stdin.write("some commands\n") 
stdout, stderr = p.communicate() 

print('stdout:') 
print(stdout) 
print('stderr:') 
print(stderr) 
+0

感謝を。しかし、それはプロセスが 'p.communicate()'の後でハングアップしているようだ。 – boldbrandywine

+0

@boldbrandywine:1 - 'input'パラメータを使って入力を渡す:' p.communicate(input = "some command") '2-' p .communicate() 'は、子プロセスが終了するのを待ちます。つまり、サブプロセスからの応答に応じた動的入力を渡したい場合には使用しないでください。おそらく、 '' pexpect''モジュールがこの場合には必要です(http://stackoverflow.com/q/7897202/4279) – jfs

関連する問題