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

时间:2016-09-19 15:55:10

标签: python argparse pyinstaller

我有一个使用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(打开命令行工具)并让命令行等待我的命令(在这种情况下运行或导出)。相反,它只会抛出错误并退出。

2 个答案:

答案 0 :(得分:1)

使用cmd module创建一个shell。

然后,您可以使用您创建的cmd.Cmd()类通过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命令会自动提供帮助。

答案 1 :(得分:0)

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

$ ./myfile -arg -arg