簡體   English   中英

argparse在Windows上不適用於Cython

[英]argparse does not work with Cython on Windows

我正在編寫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選項。

有人知道這里可能會發生什么嗎?

謝謝

argparse工作正常,但是您將Python 3 UTF-8 stringchar* 更改main wmain意味着您將以ASCII處理輸入。 在此處查看有關如何在MINGW編譯器中啟用wmain答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM