关于python:os.popen().readlines的奇怪行为

Strange behavior of os.popen().readlines

本问题已经有最佳答案,请猛点这里访问。

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

我编写了一个方法来检查python版本并使用相应的输入方法(如下所示)

问题是:

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

收益率

1
2
Python 2.7.15rc1
[]

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

如果我更改文本以请求Git版本

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

它返回

1
2
['git version 2.17.1
'
]

喜欢它应该。

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

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

1
2
3
4
5
6
7
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)


python --version将版本信息打印到stderr。您正在捕获stdout。您需要捕获stderr,或者将stderr重定向到stdout。

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