Python 调用 shell 的时候,如何获得持续输出?

2016 年 9 月 19 日
 whx20202

比如我用 apt-get -y install vim 这样的

或者 ping www.baidu.com 这样的

他屏幕回显肯定一大堆,每秒钟好几行,

我想持续不断的获得回显,而不是等程序跑完了才获得

有办法吗?

4679 次点击
所在节点    Python
10 条回复
wangyongbo
2016 年 9 月 19 日
p = subprocess.Popen('ping www.baidu.com > /dev/stdout', shell = True, stdout = subprocess.PIPE, stderr = subprocess.PIPE)
p.stdout.readline()
其他命令 应该都差不多吧。
gimp
2016 年 9 月 19 日
cmd = 'ping -c 6 ' + url
r = Popen(cmd, shell=True, stdout=PIPE)
for line in iter(r.stdout.readline, b''):
line = line.strip('\r\n')
print line
gimp
2016 年 9 月 19 日
上边的是 python2.7 的代码,缩进爆炸...
whx20202
2016 年 9 月 19 日
上面两位已感谢 我去试试哈
lunaticus7
2016 年 9 月 19 日
python -u
Ethaniz
2016 年 9 月 19 日
用 PIPE ,一定要及时消费,小心死锁
264768502
2016 年 9 月 19 日
可以参考下面对 adb 的实现
https://github.com/264768502/adb_wrapper/blob/master/adb_wrapper/adb_wrapper.py
看 def _enqueue_output 和 def _adbcommand_blocking
whx20202
2016 年 9 月 19 日
@Ethaniz 好的 我去搜下 pipe 死锁的概念
0xccff
2016 年 9 月 19 日
输入输出重定向
xFrank
2016 年 9 月 20 日
用 subprocess.call 就行了

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

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

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

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

© 2021 V2EX