为什么我的输出每行一个字符?
问题描述:
我有这个调用shell脚本并处理输出的python脚本。为什么我的输出每行一个字符?
$ cat cd-and-run.py
#!/usr/bin/env python
import sys, getopt
import subprocess
def run_mock_phantom (test_value):
aid = 'unknown'
proc = subprocess.Popen(['./mock-phanton.sh', test_value], stdout=subprocess.PIPE)
for line in proc.communicate()[0]:
print line
return aid
def main(argv):
app_id = run_mock_phantom ('test-one-two')
print "app is %s" % (app_id)
if __name__ == "__main__":
main(sys.argv[1:])
这里是shell脚本上面的脚本调用:
$ cat mock-phanton.sh
#!/bin/sh
appid=$1
if [ -z $appid ]
then
echo "oh man you didnt do it right ..."
exit 0
fi
echo "APP_ID=$appid"
当我运行该脚本,我得到这样的输出:
$ ./cd-and-run.py
A
P
P
_
I
D
=
t
e
s
t
-
o
n
e
-
t
w
o
app is unknown
我不明白的是为什么每个字符输出在一个单独的行,而不仅仅是...
APP_ID=test-one-two
?
答
尝试修改此:
for line in proc.communicate()[0]:
print line
这样:
print proc.communicate()[0]
我想你无意中遍历字符串。
编辑:
正如this question提到的,你可以遍历标准输出的多行过proc.communicate()[0].splitlines()
。也许更清洁的方式做到这一点是这样的,在same question描述:
for line in proc.stdout:
print line
'用于proc.communicate线()[0]'不随线迭代。 'proc.communicate()[0]'是一个字符串。遍历字符串迭代字符。 – user2357112
Doh!谢谢!我甚至没有看到那里的[0]。 –
删除'[0]'不会使它遍历行。 – user2357112