使用相同的代码在Python 2和3中将bytes或str转换为str

时间:2018-05-16 16:27:46

标签: python

我的代码使用subprocess.check_output(),它在Python 2中返回str,在Python 3中返回bytes。有没有办法让代码在Python 2和3中运行,将其转换为str

即。我想要这个,但更优雅:

output = subprocess.check_output(...)
if sys.version_info[0] >= 3:
   output = output.decode()

要明确,我不想在Python 2中使用unicode,我希望将其保留为str

1 个答案:

答案 0 :(得分:1)

您可以在调用universal_newlines=True函数时回避subprocess的问题。

subprocess.check_output(..., universal_newlines=True)

如果检查输出类型:

$ python2 -c "import subprocess;print(type(subprocess.check_output('ls')))"
<type 'str'>

$ python2 -c "import subprocess;print(type(subprocess.check_output('ls', \
                                           universal_newlines=True)))"
<type 'str'>

$ python3 -c "import subprocess;print(type(subprocess.check_output('ls')))"
<class 'bytes'>

$ python3 -c "import subprocess;print(type(subprocess.check_output('ls', \
                                           universal_newlines=True)))"
<class 'str'>