为什么我的输出每行一个字符?

时间:2017-03-17 04:31:33

标签: python

我有这个调用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

1 个答案:

答案 0 :(得分:3)

尝试更改此内容:

for line in proc.communicate()[0]:
        print line

到此:

print proc.communicate()[0]

我认为你无意中迭代了一个字符串。

修改

this question中所述,您可以遍历proc.communicate()[0].splitlines()多行stdout。也许更简洁的方法是这样的,在same question

中有描述
for line in proc.stdout:
    print line