使用python(MAC)检查返回代码

2024-03-28 16:16:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个脚本来检查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}$

是的


Tags: echoinfo脚本trueurlgetmaindef
2条回答

在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

有几种方法可以实现你的目标。一种简单的方法是:

import subprocess as sp
p = sp.Popen(['command', 'arg1', 'arg2'], stdout=sp.PIPE, stderr=sp.PIPE)
stdout, stderr = p.communicate()
returncode = p.returncode

这样,您就不必经过子shell(默认情况下是shell=False),这是出于各种原因推荐的方法。您可以直接捕获生成的子进程的返回代码,并且可以完全访问子进程的标准输出和标准错误。在

相关问题 更多 >