我正在尝试包装一个非常基本的脚本的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
无法找到屏幕的错误。
答案 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。