python用subprocess调用外部exe如何实时捕捉stdout输出

2013-10-24 22:34:42 +08:00
 tommark
写了一个Python代码,用subprocess调用外部exe程序,这个程序会监控文件,然后给出相关的输出,问题是,在subprocess用管道重定向后,exe里的输出是缓存在,只有输出一定数据量时才会传到管道中,如何让subprocess里的管道无缓存运行? 虽然subprocess的Popen里有个buffersize项,但是设成0和1都没用,不知有没有谁遇到过这个问题,求解!!!!!
9794 次点击
所在节点    Python
9 条回复
dreampuf
2013-10-25 02:23:07 +08:00
不想自己维护buf定期输出就用python-sh模块
stevenyou
2013-10-25 07:25:45 +08:00
clouder
2013-10-25 08:48:05 +08:00
fd=os.poopen(cmd)
print fd.read()
fd.close()
lixm
2013-10-25 10:20:25 +08:00
non-block IO就可以了, 可以参考这个 https://gist.github.com/7148531
emptyhua
2013-10-25 17:04:19 +08:00
xierch
2013-10-25 18:38:07 +08:00
这是得在 exe 里调用 flush 吧..?
tommark
2013-10-25 22:39:05 +08:00
@xierch 不能在exe里flush,这个是用来测试的,没法修改exe的代码。
tommark
2013-10-25 22:42:11 +08:00
@emptyhua 这个我试过,但是不行。
#model.py
while True:
print('enter:')
s = input()
print(s)
if s == 'q':break
用model.py做为测试exe,主程序调用它,ping.stdout.readline会被阻塞的。
wynemo
2013-10-26 21:41:58 +08:00
其实stdout=sys.stdout 应该就可以了吧。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/86812

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX