2016-06-14 5 views
0

私はPythonを初めて使用しており、構文が実際に私を怒らせています。コマンドラインで渡された引数に基づいて関数を実行したいスクリプトを実行する必要があります。以下に擬似コードを示します。コマンドラインでsys.argvに基づいたif/else文が実行される

import sys 

... 
Code 
Authentication 
Role Validation 
... 

Arg[1] 
Arg[2] 
Arg[3] 

if(Arg[3] !exist) 
    execute Func1 with Arg[1] & Arg[2] 
else if 
    execute Func 2 with Arg[1], [2] & [3] 

これをPythonの世界でどのように構造化するか、他の方法があれば教えてください。

+1

なぜ最初にチュートリアルをやろうとしますか? – drum

+0

私はArgParseのモデルのように聞こえます!.. LMGTFY https://docs.python.org/3/library/argparse.html – AK47

+0

@drumへの改訂:私は 'sys.argv'に焦点を当てることをお勧めします。チュートリアルでは 'len(sys.argv)<4'、def doing_this(a、b):...'、 '' f'、 'elif'あなたが壁に当たったら戻ってきてください。ここでコーダーは、あなたが次の壁を準備する/見つけられるのを助けることを愛するでしょう。 – Dilettant

答えて

2

あなたはsys.argvを使用する必要がある場合は、それだけで通常のPython listだ、あなたは(0番目の要素は、プログラム自体で、覚えておいてください)渡された引数の数をチェックし、それにlenを使用することができます。

if len(sys.argv) == 3: 
    func1(*sys.argv[1:3]) # * unpacking removes repeated references to sys.argv 
elif len(sys.argv) == 4: 
    func2(*sys.argv[1:4]) 

the argparse moduleのように見てみることをおすすめします。それはもっと学ばなければなりませんが、あなたのスクリプトは自動的に-h/--helpをサポートしているので、使い方のメッセージを個別に実装することなく、スクリプトを使いやすくなり、同期が外れる危険性があります。

また、サードパーティのパッケージを使用している場合は、​​の代わりにdocoptが一般的に賞賛されます。

+0

ありがとう!これはうまくいった! –

1

私はこれがあなたが探していると信じています。 sys.argvは、コマンドライン引数を含むリストです。 sys.argv[0]は通常は実行したコマンドなので、それ以降のコマンドには興味があります。

if len(sys.argv) == 4: 
    execute Func 2 with sys.argv[1], sys.argv[2] & sys.argv[3] 
elif len(sys.argv) == 3: 
    execute Func1 with sys.argv[1] & sys.argv[2] 
1

sys.argvは、スクリプトがeで呼び出された引数を取得します。 g。あなたがこのようにスクリプトを実行する場合:

pytohn script.py arg1 arg2 

sys.argv次のようになります。

["script.py", "arg1", "arg2"] 

また組み込みlen関数は、配列の長さを返します。上記の例の場合、len3である必要があります。

これを知っていると、コードを書くことができるはずです。

あなたはこれがここで働いてもらう苦労することはヒントの場合:

import sys 
arg = sys.argv 

if len(arg) == 3: 
    func1(arg[1], arg[2]) 

elif len(arg) == 4: 
    func2(arg[1], arg[2], arg[3]) 
1

あなたは可能性が尋ねる何が最も簡単な方法は、あなたがsys.argv

import sys 

def func1(a, b): 
    print "func1", a, b 

def func2(a, b, c): 
    print "func2", a, b, c 

if __name__ =='__main__': 
    if len(sys.argv) == 3: 
     func1(sys.argv[1], sys.argv[2]) 
    elif len(sys.argv) == 4: 
     func2(sys.argv[1], sys.argv[2], sys.argv[3]) 

によって与えられたリストの長さを見て最初の引数がプログラムそのものであることに気づいたようです。 引数の数が間違っているとどうなるか考えてみてください。 をご覧ください​​module

関連する問題