以下代码返回错误,我不明白为什么......
在Python 3.6上运行
import subprocess
import sys
import os
def execute_shell_cmd(cmd):
process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
for c in iter(lambda: process.stdout.read(1), b''):
sys.stdout.write(c)
for e in iter(lambda: process.stderr.read(1), b''):
sys.stderr.write(e)
execute_shell_cmd("ls -l")
返回的错误:
类型错误:write() 参数必须是 str,而不是 bytes
我在网上看到的所有内容都谈到文件并使用“wb”选项打开它们,但这与这里无关。
我确信这很愚蠢...
有任何想法吗?
您在没有编码参数集的情况下打开子进程,因此流是二进制流(这是一个非常理智的默认值,考虑到像 GhostScript 这样的东西可以在stdout
).
Do
process = subprocess.Popen(
cmd,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
shell=True,
encoding='utf-8',
errors='strict', # could be ignore or replace too, `strict` is the default
)
如果您希望将流封装在 UTF-8 解码器中,以便从中获取字符串而不是字节。当然,这意味着您知道输出数据始终是 UTF-8。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)