【发布时间】:2011-09-03 18:22:35
【问题描述】:
我正在编写一个脚本,通过使用适当的“版本”命令行标志(即--version、-v 等)从命令行程序获取版本号。整个程序使用正则表达式来获取实际的版本号从文本输出中,然后将其与从 xml conf 文件等中提取的最低要求或最高允许版本等各种条件进行比较。
脚本在执行 bzip2 之前运行良好。
对于大多数程序,以下代码没有问题:
args = 'cmd --version'
output = subprocess.getstatusoutput(args)
切得很干。然而!如果您尝试使用 bzip2(到目前为止这是我遇到问题的唯一程序)ala 'bzip2 --version' python "freezes" 并且您必须 ctrl-C 才能在没有记录输出的情况下中断当然。
我尝试了各种变化,例如走长途,即:
import subprocess
from subprocess import PIPE, STDOUT
proc = subprocess.Popen(args, stdout=PIPE, stderr=STDOUT)
while(True):
code = proc.poll()
if(code is not None):
break
line = proc.stdout.readline() # or even read()
etc.
无论我使用哪种方法来提取相关文本,Python 总是在某个点后挂起。我在某些时候尝试过 .kill() 来阻止锁定事件,但无济于事。
我认为这只是 bzip2,因为出于某种原因它仍然期待带有 --version 标志的输入。
有什么想法吗?
【问题讨论】:
-
@Foon - 我安装了 Python 2.7.1 和 3.2 版本(全新安装 fc15)。我的 bzip2 版本是 1.0.6。我用 Python 2 和 3 逐字尝试了你的代码,我得到了和以前一样的结果;空行,没有提示,必须ctrl-C出来。不知道是不是bzip2版本1.0.6?
-
@lennart-regebro - 我开始认为这是我的 bzip2 (1.0.6) 版本 - 我尝试了你的代码,我遇到了和以前一样的问题。如果我在空白提示符下键入命令,则无论我键入什么都不会发生任何事情。澄清一下,我可以让 bzip2 吐出它的 --version 信息,它只是不返回提示,或者在我的代码的情况下,将其填充到变量中。
-
我还想补充一点,在提示符下手动运行 'bzip2 --version' 后,它会在版本文本之后打印两行额外的行,这让我相信正在发生其他奇怪的事情:@987654323 @
标签: xml python-3.x version subprocess bzip2