【问题标题】:Python subprocess: return value incorrectPython子进程:返回值不正确
【发布时间】:2019-09-06 20:13:33
【问题描述】:

我正在编写一个使用子进程的 Python 模块,以查看进程是否已运行并获取其 PID。到目前为止,我已经完成了运行进程的部分。

进程显然在运行,但是这段代码有问题,所以它抛出了我的自定义异常 ReturnFalseValue。

def sys_userwrapper(user, cmd):
    cmd = "su " + user + " --login --command=\"" + cmd + "\""
    dbgPrint("running: " + cmd)
    args = shlex.split(cmd)

    p = subprocess.Popen(args)
    p.wait()
    r = p.returncode

    if (not p == 0):
        raise ReturnValueFalse
    else:
        return p.pid

这是我对该方法的小单元测试...

>>> relayman.sys_userwrapper("oper", "echo helloworld")
Debug: running: su oper --login --command="echo helloworld"
helloworld
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/root/relayman.py", line 32, in sys_userwrapper
    raise ReturnValueFalse
relayman.ReturnValueFalse

如您所见,它打印了 HelloWorld,但由于某种原因,它认为存在错误,就好像 echo 没有返回 0 但确实有效。

【问题讨论】:

  • 你不想检查r,而不是p吗?
  • 它应该从“p”得到“r”我想,我没有那个,只有“r”?

标签: python subprocess shlex


【解决方案1】:

r 保存您的返回码;您测试了if (not p == 0):,其中pPopen 对象。 Popen 对象绝对不等于零。

【讨论】:

  • 将在计时器结束后将其作为正确答案(发布后 7 分钟)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-19
  • 1970-01-01
  • 2018-06-20
  • 1970-01-01
  • 2016-11-16
相关资源
最近更新 更多