gpt4 book ai didi

python - 使用 Python 子进程从 stdout 上的 C 程序捕获输出?期待吗?

转载 作者:行者123 更新时间:2023-11-28 22:02:17 25 4
gpt4 key购买 nike

我想捕获我正在启动的 C 程序的输出:

p = subprocess.Popen(["make", "run_pci"],
stdout=subprocess.PIPE,
cwd="/home/ecorbett/hello_world_pthread")
for ln in p.stdout:

唯一的问题是在 C 程序完成之前我没有得到输出,而实际上我需要在程序运行时逐行获取输出。更复杂的是,我必须解析每一行(我只需要来自行的某些数据)。

例如,这是一些示例输出:(我需要捕获“Tile # 上的线程”)

blahblah blah Thread blahblah blah tile 1: On 
blahblah blah Thread blahblah blah tile 2: OFF
blahblah blah Thread blahblah blah tile 3 : Disable

我注意到下面链接的文章似乎有同样的问题。我在想如何让它适应我的情况?

Getting realtime output from ffmpeg to be used in progress bar (PyQt4, stdout)

Python 新手,非常感谢示例代码!!!

最佳答案

您需要使用 pexpect 的原因如果程序的 stdio 没有连接到 tty,它将使用 block 缓冲。 pexpect 使用伪 tty (pty),因此 stdio 将使用行缓冲,您将能够在输出时访问行。

将您的代码更改为:

p = pexpect.spawn('make', ['run_pci'], cwd="/home/ecorbett/hello_world_pthread")
for ln in p:
...

您可以使用 pexpect.spawn.expect 来获取您感兴趣的输出:

while p.expect('Thread on Tile (\d+):', pexpect.EOF) == 0:
print("Tile {0}".format(int(p.group[1])))

关于python - 使用 Python 子进程从 stdout 上的 C 程序捕获输出?期待吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11563752/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com