検索

ホームページ  >  に質問  >  本文

Python获取命令行参数后进行处理的时候为什么不能进到else中,请大神赐教哈

# 获取命令行参数
opts,args = getopt.getopt(sys.argv[1:],"hi:n:o:s:d:")
#function to show help information when user input "-h"
def usage():
    print ("sys.argv[0]: ' -i p_case_dir -n p_case_id_str -o p_out_dir -s p_src_conn -d p_dst_conn'")
    print ("sys.argv[0]: ' -h'")

for op,value in opts:
    if(op == "-i"):
        p_case_dir =  value
    elif(op == "-n"):
        p_case_id_str = value
    elif(op == "-o"):
        p_out_dir = value
    elif(op == "-s"):
        p_src_conn = value
    elif(op == "-d"):
        p_dst_conn = value
    elif(op == "-h"):
        usage()
        os._exit(0)
    else:
        usage()
        os._exit(0)
        
迷茫迷茫2838日前757

全員に返信(2)返信します

  • PHP中文网

    PHP中文网2017-04-18 09:46:25

    本当の理由は、パラメータを指定せずにスクリプトを実行すると、opts, args = getopt.getopt(sys.argv[1:], "hi:n:o:s:d:") によって取得された opts = [] が空の list であり、前述のように例外エラーが報告されないためです。 > の場合、list 文は for op,value in opts: ループに入らず、当然、for のロジックはトリガーされません。 else

    テストをしてみましょう:

    リーリー

    したがって、コードは次のように書き換える必要があります。

    リーリー

    また、Python 2.7 からは、より柔軟で便利な

    が標準ライブラリに含まれるようになりましたので、argparsegetopt公式 Web サイトのマニュアル
    を置き換えることをお勧めします

    返事
    0
  • 迷茫

    迷茫2017-04-18 09:46:25

    次の文はすでに例外を報告しているため:

    リーリー

    例外は事前にキャッチする必要があります:

    リーリー

    次に、if/elif/else で通常のパラメータの入力を処理します。

    返事
    0
  • キャンセル返事