使用 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 上卸载 Ruby(zlib 错误)

opensuse 防火墙怎么关

select,poll,epoll的区别以及使用方法

在 openSuSE 中使用带有 python3 的 virtualenv

如何在 opensuse 中使用 yast 设置基于名称的虚拟主机?

如何在opensuse上使用hhvm?