Pythonスクリプトで外部プログラムを呼び出し、出力と戻りコードを取得するにはどうすればよいですか? subprocessモジュールでPythonで外部プログラムを呼び出し、出力と戻りコードを取得する方法は?
答えて
ルック:簡単な例は以下の...
from subprocess import Popen, PIPE
process = Popen(["ls", "-la", "."], stdout=PIPE)
(output, err) = process.communicate()
exit_code = process.wait()
私はアンブロズの提案を反映するために上記の答えを編集しましたコメントを読んでいないし、以前は間違ったコードを使用する。 –
何らかの理由でこれが機能しない場合は、shell = Trueをパラメータに追加することができます(ウィンドウ内の場合) – ntg
[上記の解決策](https://stackoverflow.com/a/707001/1321680) )は単純なcall ['subprocess.run()'](https://docs.python.org/dev/library/subprocess.html#subprocess.run)に置き換えることができます(Python> = 3.5が必要です)。 –
チェックアウトここでは、サブプロセスモジュール:http://docs.python.org/library/subprocess.html#module-subprocess。あなたが必要とするものを手に入れなければなりません。
アンブロスBizjakの以前のコメントに続き、ここで私のために働いたソリューションです:いくつかの研究の後
import shlex
from subprocess import Popen, PIPE
cmd = "..."
process = Popen(shlex.split(cmd), stdout=PIPE)
process.communicate()
exit_code = process.wait()
これははるかに良い答えです。 – dotancohen
私はプロセスから3つのものを得る方法を示す類似の投稿[here](https://stackoverflow.com/questions/1996518/retrieving-the-output-of-subprocess-call/21000308#21000308)を持っています:exitcode 、stdout、stderr。 – Jabba
、私は私のために非常によく動作し、次のコードを持っています。基本的にstdoutとstderrの両方をリアルタイムで表示します。それが必要な人を助けることを願っています。
stdout_result = 1
stderr_result = 1
def stdout_thread(pipe):
global stdout_result
while True:
out = pipe.stdout.read(1)
stdout_result = pipe.poll()
if out == '' and stdout_result is not None:
break
if out != '':
sys.stdout.write(out)
sys.stdout.flush()
def stderr_thread(pipe):
global stderr_result
while True:
err = pipe.stderr.read(1)
stderr_result = pipe.poll()
if err == '' and stderr_result is not None:
break
if err != '':
sys.stdout.write(err)
sys.stdout.flush()
def exec_command(command, cwd=None):
if cwd is not None:
print '[' + ' '.join(command) + '] in ' + cwd
else:
print '[' + ' '.join(command) + ']'
p = subprocess.Popen(
command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=cwd
)
out_thread = threading.Thread(name='stdout_thread', target=stdout_thread, args=(p,))
err_thread = threading.Thread(name='stderr_thread', target=stderr_thread, args=(p,))
err_thread.start()
out_thread.start()
out_thread.join()
err_thread.join()
return stdout_result + stderr_result
あなたは、外部のプログラムを実行し、出力し、リターンコードを取得し、同時にリアルタイムでコンソールの出力を取得することができます小さなライブラリ(py-executeを)Iを開発しました:
>>> from py_execute.process_executor import execute
>>> ret = execute('echo "Hello"')
Hello
>>> ret
(0, 'Hello\n')
あなたはモックuser_ioを渡してコンソールに印刷を避けることができます。
>>> from mock import Mock
>>> execute('echo "Hello"', ui=Mock())
(0, 'Hello\n')
(Pythonの2.7で)、プレーンpopenので、私はトラブルCOMMの実行を持っていたので、私はそれを書きました長い出力を持つと
- 1. JUnitで外部プログラム呼び出しを模擬する方法
- 2. 戻り値の取得とプログラム出力
- 3. NSURLSessionDataTaskと呼び出しブロックから戻り値を取得する方法は?
- 4. C#でjavascriptを呼び出して戻り値を取得する方法は?
- 5. ajax呼び出しから戻り値を取得する方法は?
- 6. 別のプログラムを呼び出して$で戻り値を取得する方法は?
- 7. node.jsから外部スクリプト/プログラムを呼び出す方法
- 8. Pythonは外部Cプログラム呼び出しの改行文字で文字列を出力します
- 9. Pythonプログラムに端末出力データを取得する方法は?
- 10. Python/Django unittest、外部呼び出しの処理方法は?
- 11. Pythonの外部コマンドを呼び出す
- 12. Pythonは入出力ストリームで外部プログラムを実行します
- 13. クエリでストアドプロシージャを呼び出し、出力パラメータなしでC#で戻り値を取得する
- 14. イベントハンドラを動的に呼び出す方法とjavascriptでその戻り値を取得する方法は?
- 15. JQuery - そのajax呼び出しの外にajax呼び出しの戻り値を使用する方法
- 16. Pythonの関数呼び出しをプログラムでビルドする方法
- 17. レールを外部データベース呼び出しにする方法は?
- 18. 別のCプログラムを呼び出してmacOSで子供の出力を取得
- 19. JavaScriptを使って外部プログラムを呼び出す(例:Cプログラム)
- 20. javaコードからjspを呼び出して出力を取得します
- 21. Pythonのdocoptで実際にプログラムを呼び出す方法は?
- 22. boost :: processを使って外部プログラムを呼び出すと、呼び出し側がハングする(Linux)
- 23. groovyスクリプト内で外部プログラムを実行し、出力を取得する
- 24. レールで外部API呼び出しを減らす方法
- 25. アセンブラで外部関数を呼び出す方法は?
- 26. window.loadで外部javascriptを呼び出す方法は?
- 27. jqueryで外部URLを呼び出す方法は?
- 28. UWPはC#でjavascriptを呼び出して戻り値を取得します
- 29. プログラムでInViewerSearchを呼び出す方法
- 30. クリップボードメニューをプログラムで呼び出す方法
あなたに役立ついくつかの既存の質問と答えがあります:http://stackoverflow.com/questions/89228/how-to-call-external-command-in-python –
可能な重複[Pythonで外部コマンドを呼び出す](http://stackoverflow.com/questions/89228/calling-an-external-command-in-python) –