与 cp1252 控制台上的 utf-8 进程通信

发布于 2024-08-12 17:53:32 字数 393 浏览 6 评论 0原文

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

I need to control a program by sending commands in utf-8 encoding to its standard input. For this I run the program using subprocess.Popen():

proc = Popen("myexecutable.exe", shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE)
proc.stdin.write(u'ééé'.encode('utf_8'))

If I run this from a cygwin utf-8 console, it works. If I run it from a windows console (encoding ='cp1252') this doesn't work. Is there a way to make this work without having to install a cygwin utf-8 console on each computer I want it to run from ? (NB: I don't need to output anything to console)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

痕至 2024-08-19 17:53:32

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

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

I wonder if this caveat, from the subprocess documentation, is relevant:

The only reason you would need to specify shell=True on Windows is where the command you wish to execute is actually built in to the shell, eg dir, copy. You don’t need shell=True to run a batch file, nor to run a console-based executable.

勿忘心安 2024-08-19 17:53:32

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

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

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

Why do you need to force utf-8 pipes? Couldn't you do something like

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

EDIT: I wrote this answer before you edited your question. I guess this is not what you're looking for, then, is it?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文