0

我正在编写一个使用子进程的 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 但确实有效。

4

1 回答 1

4

r保存您的返回码;你测试过if (not p == 0):,对象在p哪里PopenPopen对象绝对不等于零。

于 2019-09-06T20:18:05.583 回答