使用“ Gooey”在GUI和CLI模式之间切换的“聪明”方式

时间:2019-06-13 12:06:05

标签: python argparse

我正在尝试包装一个非常基本的脚本的GUI程序(这样,不懂CLI的人就可以运行它)。

我希望做的一件事是,对于那些倾向于使用相同选项的脚本,该脚本仍然可以使用CLI。

我正在为此使用Gooey,因为它对于入门的人来说似乎很好,也很简单,但是现在我对如何“切换”它感到困惑。

为了使用GUI,必须使用python框架二进制文件执行脚本,因此,我的第一个想法是寻找使用非框架二进制文件显式调用脚本的人,并将shebang指向{ {1}}其余时间。我认为这原则上可行,但目前我只能考虑对测试使用简单的if-else。

这很好,但是#!/usr/bin/env pythonw装饰器要求使用@Gooey而不是GooeyParser(来自ArgumentParser)。因此,此刻,这意味着我需要在代码中两次将整个参数导入函数,这绝对是非Python的。

例如:

argparse

是否有一种聪明的方法,可以根据启动代码的方式在GUI和CLI行为之间进行切换而不必重复编写代码?

我的其他想法包括基于其他一些线程切换装饰器,但是它相当复杂,并且我还需要在实际代码中将from gooey import Gooey, GooeyParser @Gooey(program_name="Hi I'm progam X") def gui_args(): """Parse GUI arguments""" parser = GooeyParser() parser.add_argument( "-f", "--file", action="store", widget="FileChooser", help="Some input file." ) from argparse import ArgumentParser def get_args(): """Parse command line arguments""" parser = ArgumentParser() parser.add_argument( "-f", "--file", action="store", help="Some input file." ) def main(): if <some_framework_python_test>: args = gui_args() else: args = get_args() 切换为GooeyParser。也许ArgumentParser已经提供了此功能,但我缺少明显的东西(例如,我知道Gooey处理argparse样式的帮助格式。

我对框架python也不太了解,所以我也不知道我提出的建议是否可行。欢迎所有建议!目前,在未指定Gooey二进制文件的情况下运行代码只会引发pythonw无法找到屏幕的错误。

1 个答案:

答案 0 :(得分:0)

因此,正如我所料,最肯定的是有一种“聪明” /优雅的方式。

有一个(当前)未记录的选项--ignore-gooey,它将使脚本的行为像普通的python脚本。

一个issue has been created on the github repo,作者将在不久的将来对此进行记录。

Gooey实际上在终端中将此参数作为运行命令的完整表示,并在GUI中提供了所有参数,这就是我在实际分配代码时注意到的方式。运行。

为了得到一个全面的答案,如果您通常这样调用GUI程序*:

$ pythonw MyGooeyScript.py

要启动完整的GUI会话,您可以这样调用它:

$ pythonw MyGooeyScript.py <options>

*有时有时需要使用-u在无缓冲模式下启动python。