python subprocess在执行时读取stdout
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python subprocess在执行时读取stdout,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1543字,纯文字阅读大概需要3分钟。
内容图文
![python subprocess在执行时读取stdout](/upload/InfoBanner/zyjiaocheng/815/bc6e053b024742d4890220d4349decb9.jpg)
我在程序中的一个函数检查哈希文件的md5sum
def check():
print "checking integrity status.."
md5 = subprocess.Popen(["md5sum", "-c", hashfile],shell=False, stdout=subprocess.PIPE)
#fopen = open(basefile, "r")
for f in md5.stdout.readlines():
fc = f.rstrip("\n")
sys.stdout.write("\rChecking..." + fc)
sys.stdout.flush()
现在发生的事情是整个命令首先执行然后使用md5.stdout.readlines从md5进行循环读取,因此它不是动态的,即我执行命令时不会得到输出….有没有办法我可以在命令执行时获得输出…
修复使用glglgl的答案:
def check():
print "checking integrity status.."
md5 = subprocess.Popen(["md5sum", "-c", hashfile],shell=False, stdout=subprocess.PIPE)
#fopen = open(basefile, "r")
fc = "NULL"
i = 0
for f in iter(md5.stdout.readline, ''):
k = fc
fc = f.rstrip("\n")
if "FAILED" in fc:
print fc
i = i + 1
sys.stdout.write("\rChecking... "+ str(i)+ " " + fc + (' ' * (len(k) - len(fc))) )
sys.stdout.flush()
解决方法:
当然.有几种方法.
>首先,您可以使用md5.stdout.read(),但是您必须自己进行行分离.
>然后,您可以使用文件对象md5.stdout作为迭代器进行操作.但似乎存在缓冲问题,我.即你没有立即得到结果.
>然后有可能反复调用md5.stdout.readline()直到它返回”.
在这种情况下,第三种方式是首选;我建议这样做:
…
for f in iter(md5.stdout.readline, ''):
fc = f.rstrip("\n")
sys.stdout.write("\rChecked " + fc)
sys.stdout.flush()
我也改变了输出文本,因为只有che检查已经完成才有输出.
如果这不是您想要的,而是真正让每个输出单独捕获,您应该切换到第1点.但这使它更复杂.我会考虑一个解决方案,表明它是需要的.
在那里,必须考虑以下几点:
> read()块,所以应该逐字节读取(非常难看).
>有一个问题应该输出什么,什么时候应该有间歇输出.
内容总结
以上是互联网集市为您收集整理的python subprocess在执行时读取stdout全部内容,希望文章能够帮你解决python subprocess在执行时读取stdout所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。