Python 2.7 Python 2.7.11 getopt不读取参数
在Python 2.7.13中 我们有以下python代码作为命令行参数:Python 2.7 Python 2.7.11 getopt不读取参数,python-2.7,getopts,Python 2.7,Getopts,在Python 2.7.13中 我们有以下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='' PAS
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
如果这里有什么不对劲,任何古鲁都能开导一下吗?谢谢。服务器名称被定义为主函数的局部变量,因此它在全局范围内(代码底部的行)不可见。
您可以将SERVER_NAME设置为全局变量,或者将调用main后的代码移动到main中。我倾向于后者;当我用这样的CLI编写代码时,调用main之后我没有任何代码,在调用之前我通常有全局设置代码,但这一切都不取决于main函数中发生了什么
以下是我所说的“将代码移到主目录”的意思:
dbServer = ''
def main():
global dbServer
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"
print SERVER_NAME
dbServer=SERVER_NAME
if __name__ == "__main__":
main()
对不起,我不太明白。因此,如果我将if name==main:main移动到代码的最底部,在此之后不再有代码,它仍然返回NameError:name“SERVER\u name”未定义。你能开导一下吗?谢谢你开导我!现在我明白了。另一个问题:global dbServer=>将dbServer设置为全局变量是否是一种好的做法?这取决于您将如何使用它。如果您通过在main函数中创建对象和调用函数来驱动程序,那么您可以将其传递给需要它的对象和函数,或者使用它来创建数据库连接并传递;在这种情况下,它没有理由是一个全球性的,我会这样做。在我的示例中,我只是将其作为一个全局变量,以便更紧密地匹配您的代码。