1

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

4

2 回答 2

0

我想知道子流程文档中的这个警告是否相关:

您需要在 Windows 上指定 shell=True 的唯一原因是您希望执行的命令实际上是内置到 shell 中的,例如 dir、copy。您不需要 shell=True 来运行批处理文件,也不需要运行基于控制台的可执行文件。

于 2009-11-26T13:41:10.633 回答
0

为什么需要强制使用 utf-8 管道?你不能做类似的事情吗

import sys
current_encoding = sys.stdout.encoding
...
proc.stdin.write(u'ééé'.encode(current_encoding))

编辑:我在你编辑你的问题之前写了这个答案。我想这不是你要找的,那么,是吗?

于 2009-11-26T13:57:12.710 回答