我需要对命令的输出进行循环。我以为我会用subprocess.check_output
,现在我有两个问题。
这是一个文件:
foo
bar
这是我的python脚本:
import subprocess
for line in subprocess.check_output(['cat', 'foo']):
print "%r" % line
我得到的是:
$ python subp.py
'f'
'o'
'o'
'n'
'b'
'a'
'r'
'n'
我期望:
$ python subp.py
'foon'
'barn'
子进程check_output(〔'cat’,'foo’〕)返回一个字符串:"foo\nbar"
因此,for循环遍历字符串,逐个打印每个字符。
以下应该可以解决您的问题:
import subprocess
print subprocess.check_output(['cat', 'foo'])
你也可以做:
import subprocess
for line in subprocess.check_output(['cat', 'foo']).split('n'):
print "%r" % line
对于Python3,先前的答案不会立即起作用,因为bytes
是由check_output
返回的
然后,您可以将字节解码为字符串,也可以立即将其拆分:
output = subprocess.check_output(['cat', 'foo'])
# splitting with byte-string
for line in output.split(b'n'):
print(line)
# or decoding output to usual string
output_str = output.decode()
for line in output_str.split('n'):
print(line)
Python3:
for line in subprocess.check_output(['cat', 'foo'], universal_newlines=True).split('n'):
print(line)