(一)單一獨立的參數
如果命令行輸入的參數都是各自單一獨立的,直接用個循環把所有參數逐一讀出來就行了。sys模塊里面直接用args = sys.argv就可以獲取到所有參數了(返回值args是一個list),args0]是執行的python文件路徑名,args[1:]后面的才是真正命令行輸入的參數,用個for循環就可以一一讀取args列表,示例代碼如下:
import sysdef 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 sysimport getoptdef 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)
新聞熱點
疑難解答