(一)單一獨立的參數
如果命令行輸入的參數都是各自單一獨立的,直接用個循環把所有參數逐一讀出來就行了。sys模塊里面直接用args = sys.argv就可以獲取到所有參數了(返回值args是一個list),args0]是執行的python文件路徑名,args[1:]后面的才是真正命令行輸入的參數,用個for循環就可以一一讀取args列表,示例代碼如下:
import sys
def usage():
print """
This is usage.
This is usage.
This is usage.
"""
def main(argv):
for arg in argv[1:]:
if arg == '-t':
pass
elif arg == '-h' or arg == '--help':
usage()
sys.exit()
elif arg == '-p':
pass
else:
print "Error: invalid parameters"
sys.exit()
if __name__ == '__main__':
main(sys.argv)
(二)參數結合
如果要讀取:-t mytest 這樣的組合參數,上面的方法就行不通了,在shell里面有shift可以直接移到下一個參數,但在python沒有shift的功能,所以得換種方式。一種方法是用getopt模塊(官方文檔關於getopt的解釋:點擊打開鏈接):getopt模塊里面的getopt函數可以指定參數可能的類型並且獲取所有參數。
用法:
getopt.getopt(args, options[, long_options])
options參數指定短式輸入,也就是單橫杠"-",例如"-h",long_options是可選的,用於指定長式輸入,也就是雙橫杠"--",例如"--help"。如果是單一參數輸入,options和long_options都只需要直接寫參數名,例如下面這句代碼指定兩個單一參數:-h/--help -t/--test:
opts, args = getopt.getopt(sys.argv[1:], 'ht', ['help', 'test''])
如果是后面還要繼續接參數的,options要在參數名后面加冒號":",long_options要在參數名后面加等號"=",例如下面這句代碼指定三個參數: -h/--help -t/--test -r path / --root path:
opts, args = getopt.getopt(sys.argv[1:], 'htr:', ['help', 'test','root='])
getopt函數的返回值有兩個,一般只用第一個,如下面的代碼,第一個返回值opts :" is a list of (option, value) pairs",也就是一個 -t mytest 這樣的元素對,當然如果-t后面不需要再接參數的話,那就沒有value值了。利用這個pairs返回值,我們可以用個for循環獲取參數,不管是單一獨立的參數,還是結合的參數,都可以,示例代碼如下:
import sys
import getopt
def usage():
print """
This is usage.
This is usage.
This is usage.
"""
def main(argv):
try:
opts, args = getopt.getopt(sys.argv[1:], 'm:p:h', ['miner=', 'params=', 'help'])
except getopt.GetoptError:
usage()
sys.exit()
for opt, arg in opts:
if opt in ['-h', '--help']:
pass
elif opt in ['-t', '--test']:
pass
elif opt in ['-p', '--path']:
param = arg
print param
sys.exit()
else:
print "Error: invalid parameters"
usage()
sys.exit()
if __name__ == '__main__':
main(sys.argv)
另外,還有個知識點就是,如果想要print一大段string怎么辦,用三個雙引號包住即可,如上面的代碼中usage函數,並且要注意的是三雙引號里面的內容不用縮進,直接從最開頭開始寫,否則會導致出錯。