1
キャリッジリターン(\r
)を使用してその出力を行うプログラムの出力を1行ずつ読み込む必要があります。プログラムは長い間実行されるので、プログラムの実行中に出力を読み取る必要があります。私は出力の各項目が新しい行(詳細はhere)に表示されるときにこれを行う方法を知っていますが、キャリッジリターンでは機能しないようです。コードは単にDone
を印刷し、直ちに終了しかしここでサブプロセスからキャリッジリターンで区切られた出力を読む
は、私が試してみて、それを動作させるために使用されるコード(Linuxシステム上で実行)
import subprocess
command = ["printf", "".join(["Return count: " + str(x) + "\\r" for x in range(10)]) + "\n"]
proc = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
buf = bytearray()
out = proc.stdout
while True:
c = out.read()
if c == b"":
break
if c == "\r":
print(buf)
buf = bytearray()
else:
buf += c
print("Done")
です。
私はコードを印刷したい:Return code: 1
Return code: 2
Return code: 3
など私はこの作業を取得するために変更する必要がありますか?
それでした。ありがとう!私はまもなく受け入れます。 – DonyorM
出力を行単位で読み取るには、 'for line in out:'を使用しませんか? – martineau
@martineau改行ではなく改行で区切られているためです。どのターミナルプログラム(apt-getの進行状況バーなど)がその行を更新するかを知っています。私はそれを行うプログラムを扱っています。 – DonyorM