我正在尝试执行通过subprocess.Popen调用作为字符串传递的命令,我想知道如何在大多数平台和python 3/2不可知的方式中执行它。这是一个例子:
# content of test.py
import subprocess
with open('test.cmd', 'rb') as f:
cmd = f.read().decode('UTF-8')
print(cmd)
pro = subprocess.Popen('bash',
stderr=subprocess.PIPE,
stdout=subprocess.PIPE,
stdin=subprocess.PIPE)
out, err = pro.communicate(cmd)
pro.wait()
print(out)
print(err)
我正在通过从文件中读取字符串来传递带有非ascii字符的字符串,这里是test.cmd文件的内容:
echo АБВГ
字符串读取正常,print(cmd)语句的输出正确。然而,当我尝试传递cmd来传递功能时,它失败了。在python 2中它说'ascii'编解码器不能对字符进行编码,所以它似乎试图将它从str转换为unicode,它认为str只有latin1字符。我应该如何以正确的方式编码str对象?在python 3中,通信函数需要字节作为输入,但应该使用什么编码?
答案 0 :(得分:2)
在python 2中它说“ascii”编解码器无法对字符进行编码,所以它似乎试图将其转换为unicode
它尝试将unicode编码为str。尝试明确地对其进行编码pro.communicate(cmd.encode('utf-8'))