2012-07-22 5 views
6

ユーザ名、パスワード、データベース名などのコマンドラインからパラメータを入力する必要があります。私は 'sys.argv'を使って、フラグを使わずにこれを行う方法を知っています(下記参照)。Python3でフラグ付きのコマンドライン引数を追加する

##Test.py 
hostname = str(sys.argv[1]) 
username = str(sys.argv[2]) 
password = str(sys.argv[3]) 

def ConnecttoDB(): 
    try: 
     con=sql.connect(host=hostname, user= username, passwd= password) 
     print ('\nConnected to Database\n') 

# If we cannot connect to the database, send an error to the user and exit the program. 
    except sql.Error: 
     print ("Error %d: %s" % (sql.Error.args[0],sql.Error.args[1])) 
     sys.exit(1) 

    return con 

だから、それはとして実行することができます

$ test.pyデータベースユーザ名のPASWORD

しかし、問題は、私は 'フラグ' を使用しなければならないことです。したがって、このスクリプトは次のように実行できます。

どのようにコマンドラインから引数を取るためにフラグを使用できますか?私はこれについてあなたの助けに感謝します。

答えて

6

「argparse」コードのマークに、すべての感謝の最初のものです。私はフラグで指定されたコマンドラインから引数を取る方法を考え出しました。私の懸念の

import argparse 

parser = argparse.ArgumentParser() 

#-db DATABASE -u USERNAME -p PASSWORD -size 20000 
parser.add_argument("-host", "--hostname", dest = "hostname", default = "xyz.edu", help="Server name") 
parser.add_argument("-db", "--database", dest = "db", default = "ding_dong", help="Database name") 
parser.add_argument("-u", "--username",dest ="username", help="User name") 
parser.add_argument("-p", "--password",dest = "password", help="Password") 
parser.add_argument("-size", "--binsize",dest = "binsize", help="Size", type=int) 

args = parser.parse_args() 

print("Hostname {} db {} User {} Password {} size {} ".format(
     args.hostname, 
     args.db, 
     args.username, 
     args.password, 
     args.binsize 
     )) 
def ConnectToDB(): 
    print ('Trying to connect to mySQL server') 
    # Try to connect to the database 
    try: 
     con=sql.connect(host=args.hostname, user= args.username, passwd= args.password) 
     print ('\nConnected to Database\n') 

    # If we cannot connect to the database, send an error to the user and exit the program. 
    except sql.Error: 
     print ("Error %d: %s" % (sql.Error.args[0],sql.Error.args[1])) 
     sys.exit(1) 

    return con 

一つは、コードに引数の変数を使用する方法だった

:私は修正「マーク」コードとコマンドライン経由で収集した引数を使用する方法を示し小型モジュールを使用して、それ以下のコードを貼り付けています。そのためには2つのことを行う必要があります

  1. add_argument行e.xに「dest」を追加します。 dest = "username"これは、comamnd行から収集された値が変数 'username'に割り当てられることを意味します。
  2. あなたがこのようなコマンドラインを 'dest'から割り当てた変数を使うときはいつも、変数の前に 'args' (ホスト= args.hostname、ユーザー= args.usernameは、passwd = args.password)完了

おかげ

AKご返信や、コードのための

+0

詳細については – Urhixidur

+7

あなたはあなた自身の問題解決を受け入れましたが、** @ Mark **はあなたの質問に対する答えを提供しました。これがとても親切なのかどうかわかりません... – Atcold

31

python 3ライブラリには、コマンドラインを解析するための3つのモジュールが含まれているため、セットアップに追加する余分なものはありません。あなたが使用する必要があります

1はargparse

import argparse 
parser = argparse.ArgumentParser() 

#-db DATABSE -u USERNAME -p PASSWORD -size 20 
parser.add_argument("-db", "--hostname", help="Database name") 
parser.add_argument("-u", "--username", help="User name") 
parser.add_argument("-p", "--password", help="Password") 
parser.add_argument("-size", "--size", help="Size", type=int) 

args = parser.parse_args() 

print("Hostname {} User {} Password {} size {} ".format(
       args.hostname, 
     args.username, 
     args.password, 
     args.size 
     )) 
+0

感謝。私が直面している問題は、私のコードが上記のコードで定義された変数に「未定義の変数」というエラーを出すことです。これは、その値がスクリプト内で明示的に早期に記述されていたにもかかわらず、Markでコードをインクルードした後では、値がスクリプトによって認識されないためです。要するに、スクリプトは 'argparse'モジュールから変数の値を取るようにする方法です。例えば、先ほどのスクリプトではhostname = 127.0.0.1、username = xyz、password = abcですが、これは上記のコードで置き換えられました(Markによって)ので、スクリプトには「Undefined Variables」と表示されます。 –

関連する問題