[解決済み】プロセス実行中にサブプロセスの出力が常に表示される。
2022-04-04 20:31:50
質問
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")
私のプログラムは、そのプロセスが終了するまで待機し、そのとき初めて私のプログラムの完全な出力を得ることができます。これは、終了までに時間がかかるプロセスを実行している場合、迷惑な話です。
ループか何かで終了する前にプロセス出力をポーリングすることで、プログラムに一行ずつプロセス出力を書かせることは可能でしょうか?
私が見つけたのは これ という記事があります。
解決するには?
を使用することができます。
それ
を使えば、コマンドが行を出力したらすぐに処理することができます。
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="")
関連
-
python implement mysql add delete check change サンプルコード
-
Pythonショートビデオクローラーチュートリアル
-
Python LeNetネットワークの説明とpytorchでの実装
-
[解決済み】ImportError: sklearn.cross_validation という名前のモジュールがない。
-
[解決済み】「RuntimeError: dictionary changed size during iteration」エラーを回避する方法とは?
-
[解決済み】Python regex AttributeError: 'NoneType' オブジェクトに 'group' 属性がない。
-
[解決済み】TypeErrorを取得しました。エントリを持つ子テーブルの後に親テーブルを追加しようとすると、 __init__() missing 1 required positional argument: 'on_delete'
-
[解決済み] print関数の出力をフラッシュする(pythonの出力をバッファリング解除する)にはどうすればよいですか?
-
[解決済み] シェルコマンドの実行と出力のキャプチャ
-
[解決済み】サブプロセスの出力を非表示にする方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
pythonサイクルタスクスケジューリングツール スケジュール詳解
-
Pythonを使って簡単なzipファイルの解凍パスワードを手作業で解く
-
Python Pillow Image.save jpg画像圧縮問題
-
[解決済み】ilocが「IndexError: single positional indexer is out-of-bounds」を出す。
-
[解決済み】ImportError: bs4という名前のモジュールがない(BeautifulSoup)
-
[解決済み】ValueError: pickleプロトコルがサポートされていません。3、python2 pickleはpython3 pickleでダンプしたファイルを読み込むことができない?
-
[解決済み] シェルコマンドの実行と出力のキャプチャ
-
[解決済み] 出力バッファリング無効化
-
[解決済み] Pythonでサブプロセス.PIPEをノンブロッキングで読み込む
-
[解決済み】Pythonでstdoutをファイルにリダイレクトする?