88954


subprocessにてあるコマンドを実行した時、端末から実行した時同様  
リアルタイムに戻り値を取得、表示したいのですがどうしたら良いのでしょうか

試したコード  
(実際の実行コマンドとは別ですが正常に実行されています)

[code]

    import subprocess
    from subprocess import PIPE
        
    cmd='ping 127.0.0.1'
    proc = subprocess.Popen(cmd, shell=True, stdout=PIPE)
    while proc.poll() is None:
        for line in proc.stdout:
            print(line)
    
[/code]

実行中何も表示されず、処理終了後に一括で表示されてしまいます


CC BY-SA 4.0
2022-05-20T23:04:30.367
88952
2022-05-21T04:42:52.477
2022-05-21T04:42:52.477
3060
52727
question
python subprocess
Python の subprocess で実行中プロセスの戻り値をリアルタイムに取得したい


解決できました  
[Getting realtime output using
subprocess](https://stackoverflow.com/questions/803265/getting-realtime-
output-using-subprocess)

Linux環境特有っぽいですが stdbuf を通して実行するだけでした

[code]

    import subprocess
    from subprocess import PIPE
        
    cmd='ping 127.0.0.1'
    cmd='stdbuf -oL '+cmd
    proc = subprocess.Popen(cmd, shell=True, stdout=PIPE)
    while proc.poll() is None:
        for line in proc.stdout:
            print(line)
    
[/code]

また、shell=True を無くした以下のコードでもOKでした

[code]

    import subprocess
    from subprocess import PIPE
        
    cmd = ["ping", "127.0.0.1"]
    cmd = ["stdbuf", "-oL"] + cmd
    proc = subprocess.Popen(cmd, stdout=PIPE)
    while proc.poll() is None:
        for line in proc.stdout:
            print(line)
    
[/code]

ちなみに教えていただいた先の回答で  
for文を while文に変えただけでは特に変化なし  
subprocess.Popenの引数を色々追加しても駄目でした


CC BY-SA 4.0
2022-05-21T01:23:49.320
88954
2022-05-21T01:23:49.320
52727
88952
answer