在cp1252上与utf-8中的进程进行通信

时间:2009-11-26 13:31:19

标签: python windows utf-8 cp1252

我需要通过将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控制台? (注意:我不需要输出任何东西到控制台)

2 个答案:

答案 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))
编辑:我在编辑你的问题之前写了这个答案。我想这不是你想要的,那么,是吗?