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