argparse在Windows上无法与Cython配合使用

时间:2018-08-19 07:06:03

标签: python wxpython cython argparse

我正在编写Windows应用程序。使用Python / Cython并使用MingW GNU C编译器和MSYS2终端进行编译。

下面的小片段代码显示了该问题:

import argparse

if __name__ == "__main__":

    parser = argparse.ArgumentParser(description='Argparse Cython Test')
    parser.add_argument(
        '--run',
        type=str,
        default='',
        dest="runFile",
        required=False,
        help='Execute this file.')

    args = parser.parse_args()
    print ("args -- ", args)

#endif main

我使用以下命令将代码转换为C:

> cython -3 --embed -o argTest.c argTest.py

(侧面说明:由于某种原因,发出的C代码生成一个int wmain()而不是int main()的主函数,因此 我使用sed脚本进行了更改)。然后使用MingW GCC进行编译:

> gcc -v -O3 -I/d/Python3/include/ -L /d/Python3/libs/ -o argTest argTest.c -lpython36 -lm -ldl -Wl,--subsystem,windows

使用argparse选项运行可执行文件时,我看到此输出-似乎是一些Unicode字符:

> ./argTest.exe -h                                         
usage: \u3a44\u4d5c\u2079\u7453\u6675\u5c66\u6556\u4378\u646d\u7950\u615c\u6772\u6554\u7473\u652e\u6578\u5200\u433d\u5c3a\u4957\ua4f3\u4bf8\u3ff4\u0d00\u682d\u0200▒\u02b1\ua4f3\u4bf8\u3ff0\u0e00.\u02b1▒\u02b1\ua4b4\u0cf8\u3ff0\u0800 [-h] [--run RUNFILE]
\u3a44\u4d5c\u2079\u7453\u6675\u5c66\u6556\u4378\u646d\u7950\u615c\u6772\u6554\u7473\u652e\u6578\u5200\u433d\u5c3a\u4957\ua4f3\u4bf8\u3ff4\u0d00\u682d\u0200▒\u02b1\ua4f3\u4bf8\u3ff0\u0e00.\u02b1▒\u02b1\ua4b4\u0cf8\u3ff0\u0800: error: unrecognized arguments: \u682d\u0200▒\u02b1\ua4f3\u4bf8\u3ff0\u0e00.\u02b1▒\u02b1\ua4b4\u0cf8\u3ff0\u0800

没有argparse选项,可执行文件运行良好。我的应用程序(使用wxPython)可以在Windows上正常运行,而无需使用argparse选项。

有人知道这里会发生什么吗?

谢谢

1 个答案:

答案 0 :(得分:0)

argparse工作正常,但是您将Python 3 UTF-8 stringchar*混合使用。将wmain更改为main意味着您将把输入作为ASCII处理。检查有关如何在MINGW编译器中启用wmain的答案here