os.popen().readlines 的奇怪行为[重复]

Posted

技术标签:

【中文标题】os.popen().readlines 的奇怪行为[重复]【英文标题】:Strange behavior of os.popen().readlines [duplicate] 【发布时间】:2019-06-23 03:52:57 【问题描述】:

我必须编写一个脚本,它应该与 python 2/3 兼容。 我需要使用输入法,它应该接受不带引号的输入。 Python 3 仅支持 raw_input 而 Python 2 只支持输入

我写了一个检查python版本并使用对应输入法的方法(如下图)

问题是:

output = os.popen('python --version').readlines()

返回

Python 2.7.15rc1
[]

因此,尽管打印了行,但列表实际上是空的

如果我更改文本以询问 git 版本

output = os.popen('git --version').readlines()

返回

['git version 2.17.1\n']

应该这样。

这个方法怎么会表现得如此奇怪? 有人知道如何解决这个问题吗?

我尝试在 python 2 和 3 上运行它。

def input_23_comp(text=''):    
    output = os.popen('python --version').readlines()
    output = output[0].strip() 
    if (output[0:8] == 'Python 2'):
        raw_input(text)
    else:
        input(text)

【问题讨论】:

你根本不需要使用popen来检查Python版本。 该链接很有帮助,但实际上并没有回答我的问题。 user2357112 确实回答了。 【参考方案1】:

python --version 将版本信息打印到标准错误。您正在捕获标准输出。你需要捕获stderr,或者将stderr重定向到stdout。

但是,如果您想检查正在运行的 Python 版本,则运行 python --version 是错误的方法。您通过该命令调用的版本甚至可能不是您正在运行的版本。使用sys.version_info

【讨论】:

以上是关于os.popen().readlines 的奇怪行为[重复]的主要内容,如果未能解决你的问题,请参考以下文章

python 学习os.systemsystem和os.popen

python shell 执行

python中执行命令行read结果

os.system和os.popen函数

python os.system、os.popen、subprocess.Popen的区别

ZABBIX之NGINX监控