2017-08-22 8 views
0

私はargparseを使用してユーザの引数を使って、プログラムで関数を実行しています。しかし、私はmain()で呼び出している他の汎用関数を実行することができません。実行して出力を表示せずにこれらの機能をスキップするだけです。どうすればいいですか、どこで間違っているのですか?Pythonのmainで定義されているargparseとは別の関数を実行します。

)関数は、(メインで実行する必要があります)私は機能mytop20と私は定型的なmain()関数を削除する場合は罰金実行されますが、私の目標は(run_in_mainしているユーザーの引数を使用して実行するlistappsをしたいのは、プログラムの下で言ってみましょう
import argparse 

def my_top20_func(): 
    print "Called my_top20_func" 

def my_listapps_func(): 
    print "Called my_listapps_func" 

def run_in_main(): 
    print "Called from main" 

parser = argparse.ArgumentParser() 
FUNCTION_MAP = {'top20' : my_top20_func, 
       'listapps' : my_listapps_func } 

parser.add_argument('command', choices=FUNCTION_MAP.keys()) 

args = parser.parse_args() 

func = FUNCTION_MAP[args.command] 
func() 

if __name__ == "__main__": 
    run_in_main() 

私の使用例は非常によく似ているので、上記のコードをhereから取得しました。

+1

:としてこのことを念頭に置いて、私はあなたのスクリプトを再編成したいです() 'は' print 'を実行します。メインで実行されている関数がいくつかあります。' – raphael

+0

'FUNCTION_MAP'とは何ですか?それは 'funcs_dict'でしょうか?あなたは 'args'を作るものをやめましたか?あなたは 'run_in_main'にその部分を移動しようとしましたか? – hpaulj

+0

@raphaelすでに述べたように、これは私の実際のプログラムのプロトタイプに過ぎません。私は私がすることができないmain()のrun_in_main()関数を実行したいだけです。それはずっとスキップします。 –

答えて

0

mainセクションには多くの場合、ファイルがスクリプトとして使用されている場合にのみ実行されるため、実行時には実行されません。あなたのコード例では明らかにあなたが達成しようとしているものを示していない、とあなたはすべての `run_in_main以来、いくつかのインデントを逃しているようにそれはそう

def main(args): 
    func = FUNCTION_MAP[args.command] 
    func() 

if __name__ == '__main__': 
    args = parser.parse_args() 
    main(args) 
+0

スクリプトとして実行することを考えた場合、ユーザー引数を使用して呼び出したものとは別に、 'run_in_main()'関数をどのように実行するのでしょうか? –

+0

'args'のようなオブジェクト(' Namespace'についてのドキュメントを参照)を作るか、文字列を取るよう 'main'を変更し、' args.command'を渡すことができます。 – hpaulj

関連する問題