如何通过子流程获取输出代码和返回代码?

时间:2018-11-04 19:34:58

标签: python

我正在使用subprocess模块来执行我的C程序,最后,我想同时获取返回代码和该程序返回的输出。我尝试过:

result = subprocess.check_output(['src/main', '-n {0}'.format(n)], universal_newlines=True)

上面捕获了程序的输出,仅当返回码为非零时,它才会引发错误。关键是我不想在非零错误代码上引发错误,而是想在if语句中使用它,并且如果返回码非零,我想重新运行过程。

现在,如果我将其更改为run,并调用为:

result = subprocess.run(['src/main', '-n {0}'.format(n)])

然后,我可以执行result.returncode来获取返回码,但是当我执行result.stdout时,它会显示None。有没有办法同时获得返回码和实际输出?

1 个答案:

答案 0 :(得分:2)

为了使用import { connect } from 'react-redux'; import Header from './Header.js' const mapDispatchToProps = dispatch => ({ onBack: () => dispatch({ type: 'BACK_BUTTON_CLICKED' }) }) export default connect(null, mapDispatchToProps)(Header); 捕获输出,您需要传递subprocess.run()。如果您还想捕获stderr,请同时传递stdout=subprocess.PIPE(或stderr=subprocess.PIPE以使stderr与stderr=subprocess.STDOUT属性中的stdout合并)。例如:

result.stdout

或者,如果您使用的是Python 3.7或更高版本:

result = subprocess.run(['src/main', '-n {0}'.format(n)], stdout=subprocess.PIPE, stderr=subprocess.PIPE)

您可能还希望将result = subprocess.run(['src/main', '-n {0}'.format(n)], capture_output=True) 设置为以stdout作为字符串而不是字节。