Python 2.7 python在子进程上循环。按行检查输出
我需要循环一个命令的输出。我想我应该使用Python 2.7 python在子进程上循环。按行检查输出,python-2.7,subprocess,Python 2.7,Subprocess,我需要循环一个命令的输出。我想我应该使用子流程。检查输出,现在我有两个问题 这里有一个文件: 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 'f
子流程。检查输出,现在我有两个问题
这里有一个文件:
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
'foo\n'
'bar\n'
subprocess.check_输出(['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,前面的答案不会立即起作用,因为字节
由检查输出返回
然后,您可以将字节解码为字符串或立即拆分:
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)
蟒蛇3:
for line in subprocess.check_output(['cat', 'foo'], universal_newlines=True).split('\n'):
print(line)
也可以使用或p=
(…,stdout=subprocess.PIPE);对于p.stdout中的行:…
如果要处理文本(典型用法),添加text=True
(或者,如果文本不是UTF-8,encoding=whatever
)是更好的解决方案。