在cp1252控制台上使用utf-8与进程通讯
我需要通过发送utf-8编码的命令来控制一个程序,这个命令会发送到程序的标准输入。为此,我使用了subprocess.Popen()
来运行这个程序:
proc = Popen("myexecutable.exe", shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE)
proc.stdin.write(u'ééé'.encode('utf_8'))
如果我在cygwin的utf-8控制台中运行这个程序,它是可以正常工作的。但是如果我在Windows控制台中运行(编码是'cp1252'),就不行了。有没有办法让它在不需要在每台电脑上安装cygwin utf-8控制台的情况下也能正常工作呢?(注意:我不需要在控制台输出任何内容)
2 个回答
0
为什么你需要强制使用utf-8格式的管道?难道你不能做一些其他的事情吗?
import sys
current_encoding = sys.stdout.encoding
...
proc.stdin.write(u'ééé'.encode(current_encoding))
编辑:我在你修改问题之前就写了这个回答。我想这可能不是你想要的,对吧?
0
我在想,这段来自 subprocess 文档 的警告是否有用:
在 Windows 系统上,只有当你想执行的命令是直接在命令行中内置的,比如 dir 或 copy 时,才需要设置 shell=True。你不需要设置 shell=True 来运行批处理文件,也不需要它来运行基于控制台的可执行文件。