Python获取命令行参数后进行处理的时候为什么不能进到else中,请大神赐教哈
迷茫
迷茫 2017-04-18 09:44:25
0
2
753
# 获取命令行参数
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)
        
迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

membalas semua(2)
洪涛

Sebab sebenar ialah apabila anda menjalankan skrip tanpa parameter, opts, args = getopt.getopt(sys.argv[1:], "hi:n:o:s:d:") yang diperolehi oleh opts = [] adalah list kosong dan tidak melaporkan ralat pengecualian seperti yang dinyatakan di atas, tetapi untuk Untuk kosong list, ayat for op,value in opts: anda tidak akan memasuki gelung for dan secara semula jadi ia tidak akan mencetuskan logik else.

Jom buat ujian:

lst = []
for i in lst:
    if i:
        print(i)
    else:
        print("hello")
# 结果为空, for循环并没有执行
lst = [0]
for i in lst:
    if i:
        print(i)
    else:
        print("hello")
# 列表非空, 可迭代, 正常进入else

Jadi kod anda hendaklah ditulis semula sebagai:

# coding=utf8
import getopt
import sys


def usage():
    print("{}: '-i p_case_dir -n p_case_id_str -o p_out_dir -s p_src_conn -d p_dst_conn'".format(sys.argv[0]))


def main():
    try:
        opts, args = getopt.getopt(sys.argv[1:], "hi:n:o:s:d:")
    except getopt.GetoptError as e:
        print(e)
        usage()
        sys.exit(1)
    if opts:
        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
            else:
                usage()
                sys.exit(1)
    else:
        usage()
        sys.exit(1)

if __name__ == "__main__":
    main()

Selain itu, bermula dari Python 2.7, argparse yang lebih fleksibel dan mudah telah dimasukkan ke dalam perpustakaan standard, jadi disyorkan untuk menggantikan getopt
manual laman web rasmi

迷茫

Kerana ayat berikut telah melaporkan pengecualian:

opts,args = getopt.getopt(sys.argv[1:],"hi:n:o:s:d:")

Pengecualian perlu diketahui lebih awal:

try:
    opts,args = getopt.getopt(sys.argv[1:],"hi:n:o:s:d:")
except getopt.GetoptError:
    print('This options is not supported.')
    exit(-1)

Kemudian kendalikan input parameter biasa dalam if/elif/else anda.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan