2016-09-19 2 views
1

У меня есть командная строка программы, в которой используется модуль argparse.Как сделать работу 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 (который открывает инструмент строки comman) и привести в командной строке мою команду (запустить или экспортировать в этом случае). Вместо этого он просто бросает ошибку и завершает работу.

+0

Привет, rojas, я плохо понимаю, чего вы хотите достичь – Cesar

+0

Когда я открываю исполняемый файл, он выдает ошибку слишком мало аргументов. У меня даже не было никаких изменений, чтобы вводить что-либо! –

+0

Можете ли вы определить «слушать»? – SethMMorton

ответ

1

Используйте cmd module, чтобы создать оболочку.

Затем вы можете использовать класс cmd.Cmd(), который вы создаете для запуска одиночных команд через cmd.Cmd().onecmd() method; перейти в 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

Можете ли вы peusocode? –

+0

И где я могу поместить 'argument_parser()' в этот код? –

+0

@rojas: полностью отбросить 'argument_parser'. Класс 'Cmd' заменяет его. –

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