当使用poll()方法运行python模块时(在opensuse中),终端显示返回值为None?

时间:2012-08-10 20:51:18

标签: python opensuse subprocess

我正在为流行的linux版本创建一个强化工具(RHEL, opensuse,ubuntu等)我正在OpenSUSE中测试我的代码 环境使用zypper包管理器。

我有这段代码:

message = subprocess.Popen(["/usr/bin/zypper","-n","install","vlock"],
  stdout=subprocess.PIPE,shell = False) 
details = message.stdout.readlines()
print message.poll()

这将安装包,在本例中为vlock,然后读入 从shell输出,然后打印成功值 要么是0,要么是非零数字。当我在python中运行此代码时 解释器我可以打印message.poll()或echo $?如果我跑 解释器外面的命令,我得到0表示成功或a 非预期的失败。

然而,当我实际从shell运行完整的单元测试脚本时:

sudo ./pkghelper.py  

我打印出应该保存的message.poll()值 从完成的过程返回的值与打印相同 message.poll()或echo $?而不是价值是一个 整数0或非零,我得到的值为None。有谁知道为什么 python解释器中的值是一个整数和值时的值 运行脚本是None?!?!这实际上是一个主要的障碍 我可以找到该计划的继续发展 在线任何事情

1 个答案:

答案 0 :(得分:1)

进程运行时的值为None,如果退出时没有错误则为0。因为你在解释器中调用它,所以进程已经完成并退出,返回代码为0.但是,当你将它作为脚本运行时,python继续比调用完成更快(并且它不会等待调用),因此它获得一个None,表示该进程仍在运行。 subprocess文档解释了这一点。