命令行運行Python腳本時傳入參數(shù)的三種方式

命令行運行Python腳本時傳入參數(shù)的三種方式

原創(chuàng) 2017年06月06日 20:28:12

三種常用的方式

如果在運行python腳本時需要傳入一些參數(shù)箍邮,例如gpusbatch_size软啼,可以使用如下三種方式轩娶。

python script.py 0,1,2 10
python script.py -gpus=0,1,2 --batch-size=10
python script.py -gpus=0,1,2 --batch_size=10

這三種格式對應不同的參數(shù)解析方式,分別為sys.argv, argparse, tf.app.run, 前兩者是python自帶的功能,后者是tensorflow提供的便捷方式。

sys.argv

sys模塊是很常用的模塊, 它封裝了與python解釋器相關的數(shù)據,例如sys.modules里面有已經加載了的所有模塊信息勾怒,sys.path里面是PYTHONPATH的內容,而sys.argv則封裝了傳入的參數(shù)數(shù)據声旺。
使用sys.argv接收上面第一個命令中包含的參數(shù)方式如下:

import sys
gpus = sys.argv[1]
#gpus = [int(gpus.split(','))]
batch_size = sys.argv[2]
print gpus
print batch_size

argparse

import argparse
parser = argparse.ArgumentParser(description='manual to this script')
parser.add_argument('--gpus', type=str, default = None)
parser.add_argument('--batch-size', type=int, default=32)
args = parser.parse_args()
print args.gpus
print args.batch_size

需要注意的是笔链,腳本運行命令python script.py -gpus=0,1,2 --batch-size=10中的--batch-size會被自動解析成batch_size.
parser.add_argument 方法的type參數(shù)理論上可以是任何合法的類型, 但有些參數(shù)傳入格式比較麻煩腮猖,例如list鉴扫,所以一般使用bool, int, str, float這些基本類型就行了,更復雜的需求可以通過str傳入缚够,然后手動解析幔妨。bool類型的解析比較特殊,傳入任何值都會被解析成True谍椅,傳入空值時才為False

python script.py --bool-val=0 # args.bool_val=True
python script.py --bool-val=False # args.bool_val=True
python script.py --bool-val=     # args.bool_val=什么都不寫False

通過這個方法還能指定命令的幫助信息误堡。具體請看API文檔:https://docs.python.org/2/library/argparse.html

tf.app.run

tensorflow也提供了一種方便的解析方式。
腳本的執(zhí)行命令為:

python script.py -gpus=0,1,2 --batch_size=10

對應的python代碼為:

import tensorflow as tf
tf.app.flags.DEFINE_string('gpus', None, 'gpus to use')
tf.app.flags.DEFINE_integer('batch_size', 5, 'batch size')

FLAGS = tf.app.flags.FLAGS

def main(_):
    print FLAGS.gpus
    print FLAGS.batch_size

if __name__=="__main__":
    tf.app.run()

有幾點需要注意:

  1. tensorflow只提供以下幾種方法:
    tf.app.flags.DEFINE_string雏吭,
    tf.app.flags.DEFINE_integer,
    tf.app.flags.DEFINE_boolean,
    tf.app.flags.DEFINE_float 四種方法锁施,分別對應str, int,bool,float類型的參數(shù)。這里對bool的解析比較嚴格,傳入1會被解析成True悉抵,其余任何值都會被解析成False肩狂。
  2. 腳本中需要定義一個接收一個參數(shù)的main方法:def main(_):,這個傳入的參數(shù)是腳本名姥饰,一般用不到傻谁, 所以用下劃線接收。
  3. batch_size參數(shù)為例列粪,傳入這個參數(shù)時使用的名稱為--batch_size审磁,也就是說,中劃線不會像在argparse 中一樣被解析成下劃線岂座。
  4. tf.app.run()會尋找并執(zhí)行入口腳本的main方法态蒂。也只有在執(zhí)行了tf.app.run()之后才能從FLAGS中取出參數(shù)。
    從它的簽名來看费什,它也是可以自己指定需要執(zhí)行的方法的钾恢,不一定非得叫main
run(
    main=None,
    argv=None
)
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市鸳址,隨后出現(xiàn)的幾起案子瘩蚪,更是在濱河造成了極大的恐慌,老刑警劉巖氯质,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件募舟,死亡現(xiàn)場離奇詭異,居然都是意外死亡闻察,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門琢锋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辕漂,“玉大人,你說我怎么就攤上這事吴超《む冢” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵鲸阻,是天一觀的道長跋涣。 經常有香客問我,道長鸟悴,這世上最難降的妖魔是什么陈辱? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮细诸,結果婚禮上沛贪,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好利赋,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布水评。 她就那樣靜靜地躺著,像睡著了一般媚送。 火紅的嫁衣襯著肌膚如雪中燥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天塘偎,我揣著相機與錄音褪那,去河邊找鬼。 笑死式塌,一個胖子當著我的面吹牛博敬,可吹牛的內容都是我干的。 我是一名探鬼主播峰尝,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼偏窝,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了武学?” 一聲冷哼從身側響起祭往,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎火窒,沒想到半個月后硼补,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡熏矿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年已骇,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片票编。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡褪储,死狀恐怖,靈堂內的尸體忽然破棺而出慧域,到底是詐尸還是另有隱情鲤竹,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布昔榴,位于F島的核電站辛藻,受9級特大地震影響,放射性物質發(fā)生泄漏互订。R本人自食惡果不足惜吱肌,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望屁奏。 院中可真熱鬧岩榆,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至粒褒,卻和暖如春识颊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背奕坟。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工祥款, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人月杉。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓刃跛,卻偏偏與公主長得像,于是被迫代替她去往敵國和親苛萎。 傳聞我的和親對象是個殘疾皇子桨昙,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內容

  • MachineLP閱讀 285評論 0 0
  • 對CLI程序來說,參數(shù)解析大概是一個首要的問題腌歉。 當然蛙酪,也有例外。 無參數(shù)腳本 許多常用命令翘盖,不需要輸入參數(shù)桂塞,就可...
    匿蟒閱讀 10,082評論 1 5
  • 我們在寫一個可變性比較大的腳本時候,很多情況下我們需要傳入很多個不同的參數(shù)馍驯,就像我們在終端輸入pip --help...
    迷路的南南見鳥閱讀 1,799評論 0 0
  • getopt:和C中的getopt()等價阁危。optparse:2.7后已不推薦使用。argparse:基于optp...
    顧慎為閱讀 8,681評論 1 10
  • 工作這么久泥彤,從未如此感到疲倦欲芹。當初上大學時懷著一顆熱忱的心選擇了這個專業(yè),在紅色十字架下宣誓的那一刻吟吝,就注定...
    愛吃的貨閱讀 306評論 1 0