我试图执行通过subprocess.Popen调用作为字符串传递的命令,我想知道如何在最平台和python 3/2不可知论办法。这里有一个例子:Python 2/3 subprocess.Popen和非ASCII字符
# 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中,通信函数需要字节作为输入,但是应该使用什么编码?
如果您没有将cmd解码为utf-8,那么会发生什么? – languitar
如果我在读取cmd后不解码,它确实可以工作,但只在使用UTF-8作为默认控制台编码的操作系统上运行。但我正在阅读命令并对其进行解码以准确地显示情况。实际上,我在python 2和3上获得了作为str对象的命令。我想找到一种方法来做到这一点。 – user2102508