在Python 3.7中,需要对以下代码进行哪些具体更改,以便在
subprocess
完成运行后成功终止循环?
以下代码确实运行子进程并打印每一行。但是问题是while true
循环永远不会终止,因为控制台会一直在每个新行上永远打印b''
,直到我重新启动机器为止。
import subprocess
proc = subprocess.Popen('python name-of-script.py',cwd="C:\\path\\to\\directory",stdout=subprocess.PIPE)
while True:
line = proc.stdout.readline()
if line != '':
#the real code does filtering here
print(line)
else:
break
有意义的输出之后,终端将继续打印以下内容:
b''
b''
b''
b''
b''
b''
b''
b''
b''
b''
b''
b''
答案 0 :(得分:1)
创建Popen对象时,您得到的字节流为stdout
。
如果指定了
encoding
或errors
参数,或者universal_newlines
参数是True
,则该流是文本流,否则是字节流。
因此,当您将line
与空的字符串进行比较时,它总是不相等的,因为line
最多可以是空的byte
对象{{1 }}。
空字节对象是虚假的值,因此将b''
替换为if line != ''
对空字符串和空字节对象均有效。
如果以后您希望if line:
成为文本流,则代码不会中断:)
stdout
答案 1 :(得分:0)
那是因为您正在比较苹果和梨。
''
与b''