我需要通过将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控制台(encoding ='cp1252')运行它,这不起作用。有没有办法让这项工作无需在我希望它运行的每台计算机上安装cygwin utf-8控制台? (注意:我不需要输出任何东西到控制台)
答案 0 :(得分:0)
我想知道来自subprocess documentation的这个警告是否相关:
在Windows上需要指定shell = True的唯一原因是您希望执行的命令实际内置于shell中,例如dir,copy。您不需要shell = True来运行批处理文件,也不需要运行基于控制台的可执行文件。
答案 1 :(得分:0)
为什么需要强制使用utf-8管道?你不能做像
这样的事情import sys
current_encoding = sys.stdout.encoding
...
proc.stdin.write(u'ééé'.encode(current_encoding))
编辑:我在编辑你的问题之前写了这个答案。我想这不是你想要的,那么,是吗?