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