我的代码使用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
。
答案 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'>