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

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

모든 응답(2)
洪涛

실제 이유는 매개변수 없이 스크립트를 실행할 때 opts, args = getopt.getopt(sys.argv[1:], "hi:n:o:s:d:")에서 얻은 opts = []이 빈 list이고 위에서 언급한 것처럼 예외 오류를 보고하지 않지만 For an 빈 list, 귀하의 for op,value in opts: 문장은 for 루프에 들어가지 않으며 자연스럽게 else의 논리를 실행하지 않습니다.

테스트를 해보자:

으아악

따라서 코드는 다음과 같이 다시 작성되어야 합니다.

으아악

또한 Python 2.7부터는 더욱 유연하고 편리한 argparse이 표준 라이브러리에 포함되어 있으므로 getopt
공식 홈페이지 매뉴얼

을 대체하는 것이 좋습니다.
迷茫

다음 문장이 이미 예외를 보고했기 때문입니다.

으아악

예외를 사전에 포착해야 합니다.

으아악

그런 다음 if/elif/else에서 일반 매개변수 입력을 처리합니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿