2015-05-19 2 views
0

Итак, я пытаюсь собрать базовый сценарий «версии» для личного использования. Он отлично работает с командной строкой, но потом я решил бросить графический интерфейс. И все началось странно.Поведение gooey python при запуске из другого файла

Я использую 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 и launch.py ​​в pythonFileScript, он просто взрывается и начинает плеваться из окна каждый раз, Я ввожу аргументы и запускаю удар.

Я нахожу это действительно расстраивающим и любопытным. И для меня жизнь не может понять, почему она это делает.

Итак, я пришел к вам: почему это происходит?

Если у меня возникли какие-либо подробности, или явным образом не выяснен/недостаточно исследован/недостаточно подробно, сообщите мне, и я изменю его соответствующим образом.

ответ

0

Таким образом, получается, что это ограничение модуля Gooey.

Я отправлю ответ создателя этого модуля:

Gooey принимает какой модуль sys.argv[0] точки на и сохраняет копию в временную директорию. Но! Прежде чем он сохранит его на диске, он удалит любые ссылки на себя (например, декоратор Gooey). Это позволяет Gooey затем вызывать ваш файл через что-то вроде Popen без его запуска другого экземпляра (поведение, которое вы видите). Поскольку декоратор не находится в модуле верхнего уровня, Gooey не знает, чтобы его убрать, поэтому каждый раз, когда ваш скрипт называется, он снова запускается.

TL; DR -> Парсер Gooey должен находиться в файле, где находится __main__. Входная точка вашей программы.

Для получения более подробной информации, комментируйте, и я сделаю все возможное, чтобы либо отправить вас к создателю, либо ответить на вопрос, что я могу.

Вы также можете увидеть issue Я разместил на github.

Смежные вопросы