未使用命令行选项(python)的getopt保存变量
我试图用python创建一个程序,最大的问题是让它使用命令行选项来分配程序中的变量。我一直在使用getopt,它将从我定义它的地方打印出来,但是不能在定义之外调用变量,这样我就可以在程序的其余部分使用它 在下面的代码中,“Is the following correct”的打印状态很好,但是如果我尝试在代码之后打印性别或任何其他变量,我只会得到一个未定义的错误 顺便说一下,我运行的选项是:未使用命令行选项(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 代码:
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
现在您将看到它打印出来(假设它在您描述的上下文中工作)
重构时,您实际上需要编写返回要使用的值的函数,然后使用它们,或者创建全局变量并稍微清理代码。是的,实际上。我发现的一切都只是定义这个函数并从中打印出来,但与使用定义之外的变量无关。