使用 poll() 方法(在 opensuse 中)运行 python 模块时,终端显示返回值为 None?
Posted
技术标签:
【中文标题】使用 poll() 方法(在 opensuse 中)运行 python 模块时,终端显示返回值为 None?【英文标题】:When running python module using poll() method (in opensuse) the terminal shows a return value of None? 【发布时间】:2012-08-10 20:51:17 【问题描述】:我正在为流行的 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 表示成功或 非零表示失败。
但是,当我实际从 shell 运行完整的单元测试脚本时:
sudo ./pkghelper.py
我打印出应该保存的 message.poll() 值 完成过程的返回值与打印相同 message.poll() 或 echo $?然而,而不是值是 整数 0 或非零,我得到的值为 None。有谁知道为什么 python解释器中的值是一个整数,当 运行脚本是无?!?!这实际上是一个主要障碍 程序的继续发展,我可以找到 什么都在线
【问题讨论】:
【参考方案1】:进程运行时的值为None
,如果没有错误退出则为0。由于您在解释器中调用它,因此该过程已经完成并以返回码 0 退出。但是,当您将其作为脚本运行时,python 的运行速度比调用完成的速度快(并且它不会等待call),所以它得到一个 None,表示该进程仍在运行。 subprocess 文档对此进行了解释。
【讨论】:
以上是关于使用 poll() 方法(在 opensuse 中)运行 python 模块时,终端显示返回值为 None?的主要内容,如果未能解决你的问题,请参考以下文章
在 openSuSE 中使用带有 python3 的 virtualenv