如何使 argparse 在可执行程序中工作

How to make argparse work in executable program

我有一个使用 argparse 模块的命令行脚本。

import argparse 

def run():
    print 'Running'

def export():
    print 'Exporting'

def argument_parser():
    parser = argparse.ArgumentParser()
    parser.add_argument('run', action='store_true')
    parser.add_argument('export', action='store_true')
    return parser.parse_args()

args = argument_parser()
if args.run:
    run()
else:
    export()

现在当 运行 从命令行 > python myfile.py run

时它工作得很好

但是使用 pyinstaller 我从中创建了一个可执行文件,如果我打开 main.exe 文件,我得到 too few arguments 错误,这是很合乎逻辑的。但我希望能够打开(双击)main.exe(打开命令行工具)并让命令行等待我的命令(在本例中为 运行 或导出)。相反,它只是抛出错误并退出。

使用 cmd module 创建一个 shell。

然后您可以使用 cmd.Cmd() class 通过 cmd.Cmd().onecmd() method 创建的 运行 单个命令;传入 sys.argv 命令行,用空格连接:

from cmd import Cmd
import sys

class YourCmdSubclass(Cmd):
    def do_run(*args):
        """Help text for run"""
        print('Running')

    def do_export(*args):
        """Help text for export"""
        print('Exporting')

    def do_exit(*args):
        return -1


if __name__ == '__main__':
    c = YourCmdSubclass()
    command = ' '.join(sys.argv[1:])
    if command:
        sys.exit(c.onecmd(command))
    c.cmdloop()

帮助由 help 命令自动提供。

只需使用 ./ 到 运行 命令并使用通常的 argparse 输入,如下所示:

$ ./myfile -arg -arg