代码之家  ›  专栏  ›  技术社区  ›  Mapad

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

  •  0
  • Mapad  · 技术社区  · 16 年前

    我需要通过向标准输入发送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 回复  |  直到 16 年前
        1
  •  0
  •   Jonathan Feinberg    16 年前

    我想知道这个警告是否来自 subprocess documentation ,是相关的:

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

        2
  •  0
  •   Tim Pietzcker    16 年前

    为什么需要强制使用utf-8管道?你不能做点像这样的事吗

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

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

    推荐文章