でサブプロセスにラインごとの印刷中に、タイムアウトを使用してパイソン - (Pythonの3.5で)popenの
私は((プログラムを実行している間)行ずつstdoutの印刷、およびタイムアウト機能を維持する難しさを持っていますいつかプログラムを停止してください)。
私が持っている:
import subprocess as sub
import io
file_name = 'program.exe'
dir_path = r'C:/directory/'
p = sub.Popen(file_name, cwd = dir_path, shell=True, stdout = sub.PIPE, stderr = sub.STDOUT)
そして "P" を実行している間に、これら2件の観光名所:
for line in io.TextIOWrapper(p.stdout, encoding="utf-8"):
print(line)
そして実行します。
try:
outs = p.communicate(timeout=15) # Just to use timeout
except Exception as e:
print(str(e))
p.kill()
をプログラムは、すべての出力行を印刷する必要があります15秒以上シミュレーションを実行すべきではありません。
"p.stdout"の前に "p.communicate"を使用すると、プログラムの終了時間が経過するのを待ちます。それ以外の方法で使用すると、プログラムはタイムアウトをカウントしません。
私はスレッディングなしでやりたいと思っていますが、可能であればioもなくても可能ですが、どのように(もっと練習と勉強が必要ですか)わかりません。 :-(
PS:私が実行しているプログラムは、fortranで書かれており、水の流れをシミュレートするために使用されます。ウィンドウからexeを実行すると、cmdが開き、各タイムステップごとに行が印刷されます。 exeファイルに入力を変更する感度分析。