0
在Python 2.7.13Python的2.7.11的getopt不读取参数
我们有以下Python代码采取命令行参数:
import sys
import csv
import os
import sys, getopt
import pandas as pd
print('Python version ' + sys.version)
print('Pandas version ' + pd.__version__)
def main():
SERVER_NAME=''
PORT_NAME=''
PASSWORD=''
try:
opts, args = getopt.getopt(sys.argv[1:],"hs:p:x:",["server=","port=","password="])
except getopt.GetoptError:
print 'help'
sys.exit(2)
for o, a in opts:
if o == '-h':
print '\n'+'-s/--server (required)'
print '\n'+'-p or --port (required)'
print '\n'+'-x or --password (required)'
sys.exit()
elif o in ("-s", "--server"):
SERVER_NAME = a
elif o in ("-p", "--port"):
PORT_NAME = a
elif o in ("-x", "--password"):
PASSWORD = a
else:
assert False, "No command line option. To see the options, plese use -h"
if __name__ == "__main__":
main()
print SERVER_NAME
dbServer=SERVER_NAME
但是,在运行上面的代码时,在命令行:
python test.py -s AAA -p BBB -x CCC
以下错误会显示:
print SERVER_NAME
NameError: name 'SERVER_NAME' is not defined
如果这里有什么不对的话,任何大师都可以启发吗?谢谢。
对不起,我不太明白。因此,如果我将“if __name__ ==”__main__“: ”main()“移动到代码的最底部(此后不再有代码),它仍会返回”NameError:name'SERVER_NAME'未定义“。你能开导吗? – Chubaka
谢谢你的启发!现在我明白了。另一个问题:全局dbServer =>将dbServer设置为全局变量是一种很好的做法吗? – Chubaka
这取决于你将如何使用它。如果你从'main'函数内部驱动程序(通过在main中创建对象和调用函数),那么你可以将它传递给那些需要它的对象和函数,或者用它来创建数据库连接并传递它;在这种情况下,没有理由让它成为全球性的(我就是这么做的)。在我的例子中,我只让它成为一个更接近你的代码的全局代码。 – cco