# 获取命令行参数
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)
真正的原因是当你不带参数运行脚本时,
opts, args = getopt.getopt(sys.argv[1:], "hi:n:o:s:d:")
这句得到的opts = []
, 即一个空的list
且并不像楼上说的会报异常错误, 而对于一个空的list
来说, 你这句for op,value in opts:
是不会进入到for
循环中去的, 自然也不会触发else
的逻辑。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开始, 更为灵活方便的
rrreee 🎜所以你这代码应该改写为:🎜 rrreee 🎜另外从Python 2.7开始, 更为灵活方便的argparse
被纳入标准库, 所以建议用来代替getopt
我们做个测试:
argparse
被纳入标准库, 所以建议用来代替getopt
🎜官网manual🎜因为在下面这句就已经报异常了:
需要提前捕捉异常:
然后在你的if/elif/else处理正常参数的输入。