未使用命令行选项(python)的getopt保存变量

未使用命令行选项(python)的getopt保存变量,python,command-line,getopt,Python,Command Line,Getopt,我试图用python创建一个程序,最大的问题是让它使用命令行选项来分配程序中的变量。我一直在使用getopt,它将从我定义它的地方打印出来,但是不能在定义之外调用变量,这样我就可以在程序的其余部分使用它 在下面的代码中,“Is the following correct”的打印状态很好,但是如果我尝试在代码之后打印性别或任何其他变量,我只会得到一个未定义的错误 顺便说一下,我运行的选项是:spice.py-gm-n012.345.6789-r23-e13-o voicemail.mp3 代码:

我试图用python创建一个程序,最大的问题是让它使用命令行选项来分配程序中的变量。我一直在使用getopt,它将从我定义它的地方打印出来,但是不能在定义之外调用变量,这样我就可以在程序的其余部分使用它

在下面的代码中,“Is the following correct”的打印状态很好,但是如果我尝试在代码之后打印性别或任何其他变量,我只会得到一个未定义的错误

顺便说一下,我运行的选项是:
spice.py-gm-n012.345.6789-r23-e13-o voicemail.mp3

代码:

import sys
import getopt


def main(argv):
    gender = 'missing'
    phone = 'missing'
    reasons = 'missing'
    endings = 'missing'
    output = 'missing'
    try:
        opts, args = getopt.getopt(argv, "hg:n:r:e:o:")
    except getopt.GetoptError:
        print 'spice.py -g <gender> -n <phone number> -r <reasons> -e <endings> -o <output name>'
        sys.exit(2)
    for opt, arg in opts:
        if opt == '-h':
            print 'test.py -i <inputfile> -o <outputfile>'
            sys.exit()
        elif opt in ("-g"):
            gender = arg
        elif opt in ("-n"):
            phone = arg
        elif opt in ("-r"):
            reasons = arg
        elif opt in ("-e"):
            endings = arg
        elif opt in ("-o"):
            output = arg
    print "Is the following correct? " + "Gender: " + gender + ", " + "Phone Number: " + phone + ", " + "Reasons: " + reasons + ", " + "Endings: " + endings + ", " + "Output: " + output


if __name__ == "__main__":
    main(sys.argv[1:])
print gender
导入系统 导入getopt def总管(argv): 性别=‘失踪’ 电话=‘失踪’ 原因=‘缺失’ 结尾='缺少' 输出='missing' 尝试: opts,args=getopt.getopt(argv,“hg:n:r:e:o:”) 除getopt.GetoptError外: 打印'spice.py-g-n-r-e-o' 系统出口(2) 对于opt,opt中的参数: 如果opt='-h': 打印“test.py-i-o” sys.exit() elif选择加入(“-g”): 性别=精氨酸 elif选择加入(“-n”): 电话=arg elif选择加入(“-r”): 原因=arg elif选择加入(“-e”): endings=arg elif选择加入(“-o”): 输出=arg 打印“以下内容是否正确?”+“性别:“+性别+”,“+”电话号码:“+电话+”,“+”原因:“+原因+”,“+”结尾:“+结尾+”,“+”输出:“+输出 如果名称=“\uuuuu main\uuuuuuuu”: main(sys.argv[1:]) 印刷性别
在您的代码中,
性别
不是全局性的。它仅在函数中的上下文中

作为证明,将前几行更改为:

import sys
import getopt
gender = 'missing'

def main(argv):
    global gender
# ... all the same
# ... below here
现在您将看到它打印出来(假设它在您描述的上下文中工作)


重构时,您实际上需要编写返回要使用的值的函数,然后使用它们,或者创建全局变量并稍微清理代码。

是的,实际上。我发现的一切都只是定义这个函数并从中打印出来,但与使用定义之外的变量无关。