Python スクリプトからプログラムを起動するには、次の方法を使用します。
def execute(command):
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
output = process.communicate()[0]
exitCode = process.returncode
if (exitCode == 0):
return output
else:
raise ProcessException(command, exitCode, output)
したがって、 のようなプロセスを起動するとProcess.execute("mvn clean install")
、プログラムはプロセスが完了するまで待機し、その後にのみプログラムの完全な出力を取得します。 完了するまでに時間のかかるプロセスを実行している場合、これは煩わしいものです。
ループなどで終了する前にプロセス出力をポーリングして、プログラムにプロセス出力を 1 行ずつ書き込ませることはできますか?
私は見つけたこれ関連する可能性のある記事。
ベストアンサー1
使用できますイターコマンドが出力したらすぐに行を処理するには、次のようにします。lines = iter(fd.readline, "")
典型的な使用例を示す完全な例を以下に示します (協力してくれた @jfs に感謝します)。
from __future__ import print_function # Only Python 2.x
import subprocess
def execute(cmd):
popen = subprocess.Popen(cmd, stdout=subprocess.PIPE, universal_newlines=True)
for stdout_line in iter(popen.stdout.readline, ""):
yield stdout_line
popen.stdout.close()
return_code = popen.wait()
if return_code:
raise subprocess.CalledProcessError(return_code, cmd)
# Example
for path in execute(["locate", "a"]):
print(path, end="")