所以,我正在尝试整理一个基本的“版本化”脚本供个人使用。它可以在命令行中正常工作,但后来我决定投入GUI。一切都开始变得怪异了。
我正在使用python 2.7.9和https://github.com/chriskiehl/Gooey
提供的粘性版本问题是解析器在它自己的工作正常,它获取正确的数据,返回它,当我启动我的parse.py文件时,我有它可用。 Gui窗口打开,我输入信息,它启动,我的调试打印显示正确的信息。
然而,当我尝试启动整个程序时,我在窗口输入信息,点击开始,它只是弹出另一个Gooey窗口,再次询问信息,等等等等直到我决定关闭现在打开的400个窗口。似乎每次都重新启动整个Gooey过程。
用于解析的函数:
import argparse
from gooey import Gooey
from gooey import GooeyParser
@Gooey
def initOptParser():
defaultFolderPath = "./TEST"
archivePath = "./Archives"
parser = argparse.ArgumentParser(description="Copy files to specified location")
parser.add_argument('files', metavar='file', type=str, nargs='+',
help='file(s) or directory that you wish to copy' )
parser.add_argument('-p', '--path', metavar='path',dest='path', type=str,
help='Path which will be considered as root of all projects. Default is currently : ' + defaultFolderPath,
default=defaultFolderPath)
parser.add_argument('projectName', metavar='projectName', type=str,
help='The project you wish to retrieve/add files to/from.')
parser.add_argument('-v', '--version', metavar='versionName', type=str,
help='The name of the directory which will be created during an update. By default, this will be : DATE_TIME.')
parser.add_argument('-o', '--overwrite',
help='Overwrites the files in the current version of specified project. (no new directory creation)', action="store_true")
parser.add_argument('-m', '--message', metavar='logMessage', type=str, help='Use to specify a log message which will be put in a .txt file. (default : commit.txt)')
parser.add_argument('-g', '--get', dest='method', action='store_const', help='Retrieve files from project (last version by default)', const=get, default=push)
parser.add_argument('-l', '--lock', action="store_true",
help='Locks the current project. Can be overriden/ignored on demand. (Will ask other users if they want to pull files)'+
'Unlocked when next push from the locking user is made')
parser.add_argument('user', metavar='userName', type=str, help='Specify your name.')
parser.add_argument('-a', '--archive', metavar='archivePath', type=str, help='Use to specify a directory which will be used as an archive. Current default is : ' + archivePath)
parser.add_argument('-s', '--store', metavar="destPath", help='Use to specify where you want the files retrieved from the project to be copied.')
args = parser.parse_args()
printOptions(args) # Just a basic function with a few prints to make sure data is there
args.method() # Either get() or push(). For now i'm using two factice functions who just print their name.
return (args)
initOptParser()
如果我们坚持这一点,所有数据都保持良好,我可以访问它,一切都很棒。
然而,当我尝试简单地这样做时:
import sys
sys.path.insert(0, 'C:/Users/USER/Projects/pythonFileScript/srcs')
import parse
def start():
parse.initOptParser()
parse.py位于srcs目录中,而pythonFileScript中的launch.py只会在每次输入参数并点击start时内爆并开始吐出一个窗口。
我发现这真令人沮丧和好奇。而对于我的生活无法弄清楚为什么会这样做。
所以,我来找你了:为什么发生这种情况呢?
如果我的问题中似乎缺少任何细节,或者它没有明确/研究/详细,请告诉我,我会适当修改它。
答案 0 :(得分:0)
因此,事实证明这是Gooey模块的限制。
我将发布此模块创建者的答案:
Gooey接受任何模块sys.argv[0]
指向并将其副本存储在临时目录中。但!在将其保存到磁盘之前,它会删除对自身的任何引用(例如Gooey装饰器)。这允许Gooey通过诸如Popen
之类的东西来调用你的文件,而不会触发你自己的另一个实例(你看到的行为)。由于装饰器不在顶层模块中,因此Gooey不知道将其剥离,因此每次调用脚本时它都会再次触发。
TL; DR - > Gooey的解析器必须位于__main__
所在的文件中。您的计划的切入点。
有关详细信息,请发表评论,我会尽力将您发送给创作者或回答我的意见。
您还可以看到我在github上发布的issue。