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