我正在尝试在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
答案 0 :(得分:0)
在您的代码中,gender
不是全局的。它只在函数内的上下文中。
作为证据,将前几行更改为:
import sys
import getopt
gender = 'missing'
def main(argv):
global gender
# ... all the same
# ... below here
现在你会看到它打印出来(假设它正如你所描述的那样在上下文中工作)。
当你重构时,你实际上想要编写返回你想要使用的值的函数,然后使用它们或者创建全局变量并稍微清理一下代码。