获取与Python壳牌输出

获取与Python壳牌输出

问题描述:

$ jsonlint -CQ /home/test/notokay1.json获取与Python壳牌输出

以上命令已经退出值1和下面输出

/home/notokay1.json:第6行第1列发现:'EOF' - 预期:'}',','。

我如何在Python中捕获这两者。

使用subprocess.Popen

import subprocess 

p = subprocess.Popen('jsonlint -cq /home/test/notokay1.json'.split(), 
        stdout=subprocess.PIPE, 
        stderr=subprocess.PIPE) 
out, err = p.communicate() 

print "Standard Output:", out 
print "Standard Error Output:", err 
print "Return Code:", p.returncode 
+0

我正是用这个:) –

我beleive这是你在找什么:

$ jsonlint -cq /home/test/notokay1.json > stdout.txt; echo $? > stderr.txt 

然后你可以使用python's built in file I/O阅读stdout.txt和的stderr.txt

refrence:http://www.tldp.org/LDP/abs/html/io-redirection.html

您可以使用subprocess模块,更具体地说是check_output方法。

假设你有一个名为test.bash与文件,内容如下:

echo "Hi" 
exit 1 

同时捕获的退出代码,你可以做这样的事情的输出:

# test.py file 
import subprocess 

exitCode = 0 
output = "" 
try: 
    output = subprocess.check_output(["bash", "test.bash"]) # get only ouput 
except subprocess.CalledProcessError as e: 
    # get output and exit code 
    exitCode = e.returncode 
    output = e.output 

print(output, exitCode) 

哪输出:

bash-4.2$ python test.py 
('Hi\n', 1) 

你只需要适应你的问题。

+0

OP很可能试图捕获标准错误,而不是标准输出。 – chepner