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

问题描述 投票:0回答:3

我有一个使用 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(打开命令行工具)并让命令行等待我的命令(在本例中为运行或导出)。相反,它只是抛出错误并退出。

python argparse pyinstaller
3个回答
2
投票

使用

cmd
模块 创建 shell。

然后您可以使用您创建的

cmd.Cmd()
类通过
cmd.Cmd().onecmd()
方法运行单个命令
;传入
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
命令自动提供。


0
投票

只需使用

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

$ ./myfile -arg -arg

0
投票

您可以手动填写
sys.argv
,例如:

# Created By [email protected] at 2023-12-23 09:41:29+0800
import argparse
import sys

try:
    argparse.ArgumentParser()
except Exception as e:
    print("Exception:", e)
else:
    print("No exception, it worked!")

if len(sys.argv) == 0:
    sys.argv.append(sys.executable)

try:
    argparse.ArgumentParser()
except Exception as e:
    print("Exception:", e)
else:
    print("No exception, it worked!")

© www.soinside.com 2019 - 2024. All rights reserved.