0

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

我有这段代码:

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 表示成功,或者一个非零表示失败。

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

sudo ./pkghelper.py  

我打印出 message.poll() 值,该值应该与打印 message.poll() 或 echo $?但是,我得到的值不是 0 或非零的整数,而是 None。有谁知道为什么python解释器中的值是整数而运行脚本时的值是None?!?!这实际上是程序继续开发的主要障碍,我可以在网上找到任何东西

4

1 回答 1

1

该值是None进程运行时的值,如果它没有错误退出,它将为 0。由于您在解释器中调用它,因此该过程已经完成并以返回码 0 退出。但是,当您将其作为脚本运行时,python 的运行速度比调用完成的速度快(并且它不会等待call),所以它得到一个 None,表示该进程仍在运行。子流程文档对此进行了解释。

于 2012-08-10T21:44:06.483 回答