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

时间:2013-12-02 04:37:32

标签: python command-line getopt

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

在下面的代码中,“以下是否正确”的打印状态正常,但如果我尝试在代码后打印性别或任何其他变量,我只会收到一个未定义的错误。

顺便说一下,我运行的选项是:spice.py -g m -n 012.345.6789 -r 23 -e 13 -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

1 个答案:

答案 0 :(得分:0)

在您的代码中,gender不是全局的。它只在函数内的上下文中。

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

import sys
import getopt
gender = 'missing'

def main(argv):
    global gender
# ... all the same
# ... below here

现在你会看到它打印出来(假设它正如你所描述的那样在上下文中工作)。

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