【发布时间】:2016-04-26 19:06:50
【问题描述】:
$ jsonlint -cq /home/test/notokay1.json
上面的命令有退出值 1 和下面的输出
/home/notokay1.json:第 6 行,第 1 列,找到:'EOF' - 预期:'}'、','。
如何在 Python 中同时捕获两者。
【问题讨论】:
标签: python linux shell operating-system subprocess
$ jsonlint -cq /home/test/notokay1.json
上面的命令有退出值 1 和下面的输出
/home/notokay1.json:第 6 行,第 1 列,找到:'EOF' - 预期:'}'、','。
如何在 Python 中同时捕获两者。
【问题讨论】:
标签: python linux shell operating-system subprocess
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
【讨论】:
您可以使用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)
你只需要适应你的问题。
【讨论】:
我相信这就是你要找的东西:
$ jsonlint -cq /home/test/notokay1.json > stdout.txt; echo $? > stderr.txt
然后您可以使用python's built in file I/O 读取stdout.txt 和stderr.txt
【讨论】: