2016-09-19 9 views
1

argparseモジュールを使用するプログラムコマンドラインがあります。コマンドライン> python myfile.py runなどから実行したときに実行可能プログラムで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() 

は今、それだけで正常に動作します

しかし、私はそれから実行可能ファイルを作ったと私はMAIN.EXEファイルを開いた場合、私はあるtoo few argumentsエラーを得たpyinstallerを使用してかなり論理的。しかし、私はmain.exe(コマンドラインツールを開く)を開いて(ダブルクリック)、コマンドラインが私のコマンド(この場合は実行またはエクスポート)を待つようにしたい。代わりに、エラーをスローして終了します。

+0

こんにちはrojas、私はあなたが達成したいことをよく理解していません – Cesar

+0

私は実行可能ファイルを開くと、あまりにも少ない引数をスローします。 –

+0

"listen"を定義できますか? – SethMMorton

答えて

1

cmd moduleを使用してシェルを作成します。

次に、作成するcmd.Cmd()クラスを使用して、cmd.Cmd().onecmd() methodで1つのコマンドを実行できます。スペースで参加し、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

あなたはそれを融合させることができますか? –

+0

そして、このコードに 'argument_parser()'をどこで合わせるのですか? –

+0

@rojas: 'argument_parser'を完全に削除します。 'Cmd'クラスはそれを置き換えます。 –