尝试使此代码与 subprocess.check_output python 解释器不可知

Trying to make this code with subprocess.check_output python interpreter agnostic

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

output = subprocess.check_output(['ls', '-la'], **(dict() if sys.version_info[0] < 3 else dict(text=True)))
if sys.version_info < (3, 0):
    output = output.decode()

适用于 python 2.x。但是,对于 python3.x 它输出休闲错误:

File "/usr/lib/python3.6/subprocess.py", line 356, in check_output **kwargs).stdout
  File "/usr/lib/python3.6/subprocess.py", line 423, in run
    with Popen(*popenargs, **kwargs) as process:
TypeError: __init__() got an unexpected keyword argument 'text'

"text" 参数仅在 3.7 版本中可用。这意味着您的代码将在较旧的 python 3 版本上失败。

如果你想在大多数版本上实现 运行,最好忘记这一点,如果你使用 python,则使用 decode 3. 我喜欢使用 bytes is not str 来检查这一点。但是您也可以使用版本检查。

output = subprocess.check_output(['ls', '-la'])
if bytes is not str:
    output = output.decode()

您需要解码输出,因为 check_output return 是一个 bytes 对象,如果您希望它是 [=15=,则需要在 python 3 中解码].

使用 python 2 解码可以,但 return 一个 unicode 对象。上述方法保证生成一个 str 对象,无论版本如何。