尝试使此代码与 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
对象,无论版本如何。
我正在尝试 运行 此代码用于多个 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
对象,无论版本如何。