小编Jen*_*ens的帖子

子进程命令编码

我目前正在将脚本从 Perl 迁移到 Python3 (3.6.5)。Is 在 Windows Server 2016 上运行。该脚本使用参数构建命令行,并使用subprocess.check_output. 参数选项之一称为-location:"my street"。该位置可以包含特殊字符,例如元音变音 (\xc3\xa4\xc3\xb6\xc3\x9f) 或 (\xc3\xa1\xc5\xa0)。

\n\n

当我运行 Perl 脚本时,特殊字符会正确传递到应用程序。当我运行 Python 脚本时,特殊字符将被应用程序中的问号替换。我认为被调用的应用程序需要一个 UTF-8 编码的参数字符串。

\n\n

Perl 脚本以 UTF-8 模式运行

\n\n
use UTF8;\nbinmode( STDOUT, ":utf-8" );\n
Run Code Online (Sandbox Code Playgroud)\n\n

Python脚本是用PyCharm创建的,UTF-8编码,脚本的第一行包含

\n\n
# -*- coding: utf-8 -*-\n
Run Code Online (Sandbox Code Playgroud)\n\n

我尝试了多种方法将子进程参数的编码设置为 UTF-8,但它不起作用。我曾经procmon.exe比较过 Perl 和 Python 脚本之间的应用程序调用。我可以看到,在 procmon 中为 Python 子进程调用显示的命令行对我来说是可读的。工作 Perl 调用不。在 procmon 中查找 perl 脚本的位置字符串如下所示:

\n\n

-location:"HQ/\xc3\x83\xc2\xa4\xc3\x83\xc2\xb6\xc3\x83\xc2\xb6\xc3\x83\xc2\xb6Stra\xc3\x83\xc5\xb8e"

\n\n

Perl 代码如下所示:

\n\n
$command = "C:\\\\PROGRAM FILES\\\\Application\\\\bin\\\\cfg.exe"\n$operand = "-modify -location:123\xc3\xa1456\xc3\x9f99"\n$result  = …
Run Code Online (Sandbox Code Playgroud)

python perl python-3.x

1
推荐指数
1
解决办法
6895
查看次数

标签 统计

perl ×1

python ×1

python-3.x ×1