Skip to main content
 首页 » 编程设计

python之命令行参数显示为空字符串

2025年05月04日40zhwl

我试图将一个参数传递给我的脚本,但出于某种原因,如果我为我的时间值指定 -t,它在脚本中显示为空字符串。如果我指定 --time,我会得到正确的值。为什么?

import sys, getopt, time 
 
 
def main(argv): 
    inputfile = '' 
    outputfile = '' 
    sleeptime = 6 
 
    if len(sys.argv) == 1: 
        print("No arguments supplied") 
        print('Usage: test.py -i <inputfile> -o <outputfile> -t <1-24>') 
        sys.exit() 
 
    try: 
        opts, arg = getopt.getopt(argv, "i:o:t", ["ifile=", "ofile=", "time="]) 
    except getopt.GetoptError: 
        print('Incorrect options.') 
        print('Usage: test.py -i <inputfile> -o <outputfile> -t <1-24>') 
        sys.exit() 
 
    for opt, arg in opts: 
        if opt in ("-i", "--ifile"): 
            inputfile = arg 
        elif opt in ("-o", "--ofile"): 
            outputfile = arg 
        elif opt in ("-t", "--time"): 
            print("time = ", arg) 
            sleeptime = int(arg) 
        else: 
            print("Unknown arg") 
            sys.exit() 
 
    print(sleeptime) 
 
if __name__ == "__main__": 
    main(sys.argv[1:]) 

我几乎从这里撕下了代码:https://www.tutorialspoint.com/python/python_command_line_arguments.htm

请您参考如下方法:

为了回答您的问题,我认为您忘记了 t 选项的结尾冒号(因为 t 需要一个参数),请尝试将其更改为 "i :o:t:",参见 https://docs.python.org/3/library/getopt.html#getopt.getopt .

整行应该是这样的:

opts, arg = getopt.getopt(argv, "i:o:t:", ["ifile=", "ofile=", "time="]) 

但总的来说我同意上面的评论,我建议使用 https://docs.python.org/3/library/argparse.html用于命令行参数解析:).