我在程序中的一个函数检查hashfile的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执行md5的循环读取。标准输出读取线,因此它不是动态的,也就是说,当命令执行时,我不能得到输出……有没有一种方法可以在命令执行时获得输出。。。在
使用glglglglgl的答案修复:
^{pr2}$
最初的海报是正确的,hashlib在python2.4中不可用,但是md5库是可用的。解决方法示例:
文件大小是多少?在
Popen创建一个新的子进程来运行命令。也许在你运行for循环之前就结束了。在
您可以检查“subprocess”是否已完成returncode属性的查找(在您的代码中:md5.returncode)
当然。有几种方法。在
首先,您可以使用
md5.stdout.read()
,但是在那里您必须自己进行行分离。然后,可以将file对象
md5.stdout
作为迭代器来操作。但是缓冲似乎有一个问题,也就是说,你不能立即得到结果。然后有可能重复调用
md5.stdout.readline()
,直到它返回''
。在这种情况下,第三种方法是首选的;我建议这样做:
。。。在
我还更改了输出文本,因为只有che che检查已经完成时才会有输出。在
如果这不是您想要的,而是将每个输出单独捕获,那么您应该切换到第1点。但这就更复杂了。我会考虑一个解决方案,只要表明它是需要的。在
在这方面,必须考虑以下几点:
read()
块,因此应该逐字节读取(相当难看)。在相关问题 更多 >
编程相关推荐