python獲取命令行輸入參數列表


(一)單一獨立的參數

如果命令行輸入的參數都是各自單一獨立的,直接用個循環把所有參數逐一讀出來就行了。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函數,並且要注意的是三雙引號里面的內容不用縮進,直接從最開頭開始寫,否則會導致出錯。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM