试图使此代码与subprocess.check_输出python解释器无关

试图使此代码与subprocess.check_输出python解释器无关,python,python-3.x,subprocess,python-2.x,Python,Python 3.x,Subprocess,Python 2.x,我正在尝试为多个python解释器版本运行此代码。我得到一个python3+的错误。 我想知道是否可以为这两个python解释器版本运行这段代码 output=subprocess.check_输出(['ls','-la'],**(如果是sys.version_info[0]

我正在尝试为多个python解释器版本运行此代码。我得到一个python3+的错误。 我想知道是否可以为这两个python解释器版本运行这段代码

output=subprocess.check_输出(['ls','-la'],**(如果是sys.version_info[0]<3 else dict(text=True)))
如果系统版本信息<(3,0):
output=output.decode()
适用于Python2.x。但是,对于python3.x,它会输出衰减错误:

文件“/usr/lib/python3.6/subprocess.py”,检查输出**kwargs.stdout中的第356行
文件“/usr/lib/python3.6/subprocess.py”,第423行,正在运行
使用Popen(*popenargs,**kwargs)作为流程:
TypeError:\uuuu init\uuuuuuuu()获取了意外的关键字参数“text”
“文本”参数仅在3.7版中可用。这意味着您的代码将在较旧的Python3版本上失败

如果您想让它在大多数版本上运行,最好忘记这一点,如果您使用的是Python3,请使用
decode
。我喜欢使用
字节不是str
来检查这一点。但您也可以使用版本检查

output = subprocess.check_output(['ls', '-la'])
if bytes is not str:
    output = output.decode()
您需要对输出进行解码,因为
check\u output
返回一个
bytes
对象,如果希望它是
str
,则需要在python 3中对其进行解码


使用Python2进行解码可以工作,但会返回一个
unicode
对象。上述方法保证生成一个
str
对象,无论其版本如何。

在3.7版中进行了更改:添加了文本参数,作为更易于理解的通用新行别名。添加了capture_输出参数。表示“文本”参数仅在3.7版本中可用!我已经检查过了,它是正确的。类似**(dict(text=True)if sys.version_info>(3,6)else dict()的方法应该可以工作。是的,但是有一种更简单的方法,请参阅我的答案确实是解决这个问题的更简单的方法。谢谢你,珍!