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

2016-09-19 09:30:19 +08:00
 whx20202

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

或者 ping www.baidu.com 这样的

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

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

有办法吗?

3949 次点击
所在节点    Python
10 条回复
wangyongbo
2016-09-19 09:54:08 +08:00
p = subprocess.Popen('ping www.baidu.com > /dev/stdout', shell = True, stdout = subprocess.PIPE, stderr = subprocess.PIPE)
p.stdout.readline()
其他命令 应该都差不多吧。
gimp
2016-09-19 09:58:37 +08:00
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-09-19 09:59:29 +08:00
上边的是 python2.7 的代码,缩进爆炸...
whx20202
2016-09-19 10:01:28 +08:00
上面两位已感谢 我去试试哈
lunaticus7
2016-09-19 10:18:26 +08:00
python -u
Ethaniz
2016-09-19 12:28:29 +08:00
用 PIPE ,一定要及时消费,小心死锁
264768502
2016-09-19 12:46:23 +08:00
可以参考下面对 adb 的实现
https://github.com/264768502/adb_wrapper/blob/master/adb_wrapper/adb_wrapper.py
看 def _enqueue_output 和 def _adbcommand_blocking
whx20202
2016-09-19 14:19:17 +08:00
@Ethaniz 好的 我去搜下 pipe 死锁的概念
0xccff
2016-09-19 22:20:05 +08:00
输入输出重定向
xFrank
2016-09-20 09:37:58 +08:00
用 subprocess.call 就行了

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

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

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

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

© 2021 V2EX