我编写了一个脚本来检查SVN Repo是否启动并正在运行,结果基于返回值。在
import subprocess
url = " validurl"
def check_svn_status():
subprocess.call(['svn info'+url],shell=True)
def get_status():
subprocess.call('echo $?',shell=True)
def main():
check_svn_status()
get_status()
if __name__ == '__main__':
main()
我面临的问题是,如果我将url更改为不存在的东西,那么返回值仍然是0,但是如果我要在脚本之外运行这个,即转到终端类型svn info wrong url
,然后执行echo $?
,我得到的返回值是1。但是我不能在python中重新创建这个。有什么指引吗?在
更新后回溯
^{pr2}$是的
在subprocess.call返回retcode,只存储
subprocess.call(['svn info'+url],shell=True)
的结果http://docs.python.org/library/subprocess.html
为什么您的方法不起作用: 调用两个独立的子shell。第二个shell不知道第一个shell,因此没有关于在第一个shell中执行的进程的返回代码的任何信息。在
解决方案: 使用
subprocess
模块,直接生成子进程(不是通过子shell)并检索返回代码。请阅读模块的文档:http://docs.python.org/library/subprocess.html有几种方法可以实现你的目标。一种简单的方法是:
这样,您就不必经过子shell(默认情况下是
shell=False
),这是出于各种原因推荐的方法。您可以直接捕获生成的子进程的返回代码,并且可以完全访问子进程的标准输出和标准错误。在相关问题 更多 >
编程相关推荐