2010年2月28日 星期日

暖化就在眼前


週一(2010/2/22)發表的正負二度C的紀錄片(http://正負2度c.tw/theme.php?txtid=16)

這是台灣版的「不願面對的真相」,高爾講的暖化現象失控地球會如何?

看了就是少了那種切身感,

然而看了台灣版的之後真的很震驚,

幾乎我們賴以工作、生活的環境(海拔一百公尺以下的地方),

都會在上升二度後完全從地表上消失,而你我都將會是第一批的氣候難民。

除了上升二度的後果之外,暖化初期所帶的超大降雨量就足以催毀大台北地區,

以莫拉克一半的降雨量下在石門水庫計算,大台北地區將完全淹水,我們能說雨一定下在南部嗎?

相較之下,台北地區的豪雨承受能力比高雄地區小很多。

我們被迫要去思考經濟發展與生活方式要如何與大自然共存的生存之道,

而我們能做的就是少吃肉,多吃素,節約用電,隨手關燈,

形成足夠的民意力量去監督公部門的經濟發展方向、能源政策、環保政策與執行力。

2010年2月27日 星期六

橋來了

過年後的第一個上班週,

對金門人而言,最大的新聞莫過於「金門大橋」的興建有了眉目,

2010年2月25日,行政院核定興建連接大金門、小金門的跨海大橋,

也確定這座每逢選舉就會上升的浮橋,有了明確的資金跟時間表,

不再像十幾年前水頭碼頭上樹立的金烈大橋規劃看板,看得到吃不到。


國中時,我有了第一位非金城地區的同學 - 小胖,

為了更好的就學條件,跟他哥哥升上國中就離開小金門,

寄居在跟我家同條巷子的外公家,每個週六下午就是他回小金的時候。

而高中時,金門高中宿舍清一色全都是來自小金門的學生,

因為隔著金烈水道回家的路就遠了,所以大家都過著跟小胖一樣的高中生活。


記得剛唸高中時,曾經有一二年大哥也因職務調動,調掉小金門的分社,

當時船班也不多,很勤勞的往返一週也只能回來二次,

那時才算是第一次感受到大小金門往返的不便,

若是遇到春天的霧季或是夏天的颱風,那真的是有家歸不得啊~


這還只是一般日常生活遇到的,若是遇到需要緊急送醫的情況,

可能因為天候因素而一命嗚呼,這種情形是所有偏遠地區居民每天面臨的,

不是青島會館那群人所直接面對的,更不是擁有大多數選票的都會區同胞所面臨的,

而青島會館那群族類,他們的思維常多是出自黨派立場利益及選票考量,

去支持或反對改善偏遠落勢族群的生活環境。


金門,就剛好位置之故成了兩岸隔海分治下的前線,

國府在大陸敗退,1949年遷台時 大批部隊轉進至台澎金馬,

1949年6月國軍才開始在金門構築工事,

1949年10月就在三批解放軍的渡海強攻下發生了金門保衛戰(即古寧頭戰役),

雙方以近萬人的死亡結束這場血戰,

算是自1947年東北易手以來,替國軍扳回一些臉面,

也穩助了國共隔海分治的局面,而金門就在局勢變遷中莫名奇妙的被推到了前線,

也硬生生的將原來就是同屬一個生活圈的金門跟廈門切斷,

由原來的生活、通商往來,改為砲口相望、砲彈交換,有多少人至此有家歸不得,

龍應台大作大江水海 第71篇<二十海浬四十年>的主角呂愛治,就是這群人的其中之一。

此後四十年,金門就跟戰爭脫離不了關係,

1954年9月3日,解放軍把韓戰結束退下來的裝備移到金門對岸試一下火候,

以大規模的砲彈襲擊金門,直至9月22 日結束落彈七萬多發,此為兩岸砲戰時代的開端是為

「九三砲戰」。

1958年8月23日,在毛澤東支援「中東人民反侵略」政治動作及牽治美軍的政治因素下,

發動大規模砲擊是為金門砲戰(即八二三砲戰),一直打到十月初才結束。

之後則是老共持續二十年的「單打雙不行」,硬是牢牢將戰爭的夢懨繫在這個島上。



而地方民生建設在軍事管制的前提下完全停滯,一切建設都以軍事用途為考量,

直到1992年金門實施解嚴還政於民後,關於建橋到小金門的構想開始在金門浮現,

從此這個構想就一直在夢想與實現中拔河,

如此重大的基礎建設必定需要中央政府的關愛與支助,

但是經歷了李登輝、陳水扁長達十六年的執政,對這問題都只是虛應式的評估,

直到馬英九時代才積極在關注這個建設,如今以57億預算為這個建設拍板定案,

三分之二由中央政府負擔,三分之一由縣政府負擔,

在野黨則基於預算排擠、親中、效益不佳等理由反對,

而不看看近十多年來金門縣最大的財務來源金門酒廠,每年都得上繳國庫近五十億,

這麼多年上繳給中央政府的數字相較於這個建設的預算是小巫見大巫。



而對於在野黨立委以預算、經濟效益的反對理由,真讓人有「只許州官放火,不許百姓點燈」之感,

試想民進黨執政八年,

政府舉債由1999年的一兆三千億加碼到2008年的四兆

扁政府執意執行的二次金改,國庫損失三千億

八年間穩定股市的國安基金損失五六百億,

2008年執意要油價凍漲,國庫損失2200億,

今天只以金門常住人口只有六萬八千人為理由,

反對這個成本五十七億的建設,

這對小金門人而言,是政府失信十多年的基礎建設,

請問偉大的民進黨,八年執政舉了那麼多債,錢到哪裡去了?

錯誤政策的損失,

可以蓋幾座跨海大橋呢?  

可以編幾倍的八八水災重建預算?  

可以編多少中小學免費營養午餐的預算呢?

風 v.s 草

逆著風的草

終究是孤獨

又片體鱗傷的

2010年2月14日 星期日

相信

有時候我在想,

只要妳肯相信我  肯相信妳自己

我們是可以得到幸福的

可是妳卻 妳卻一直不敢相信


我不是不敢相信

而是當時我太年輕了   年輕得連自己都不敢相信自己


-- <聖稜的星光>  陸青 & 士軒

2010年2月10日 星期三

紅酒指數(Liv-ex 100 Fine Wine Index)

在財經新聞台聽到陳沖再次提到著名的紅酒指數,

一個以葡萄酒銷售趨勢追蹤未來景氣走向的領先指標。

iv-ex 100紅酒指數(Liv-ex 100 Fine Wine Index
http://www.liv-ex.com/pages/static_page.jsp?pageId=100



經濟日報編譯游宜樺】2009.03.19 03:15 am

Liv-ex 100紅酒指數(Liv-ex 100 Fine Wine Index),是國際間最具公信力的葡萄酒銷售指標。該指數是由倫敦國際酒類交易所(Liv-ex)嚴選100支紅白酒的中間價,再乘以產量加權計算,每月公布一次。
由於好的紅酒價格不斐,而紅酒愛好者也多數屬金字塔頂端的富人階段,因此紅酒指數又被視為「有錢人指數」,從中可以看出上流社會消費意願與動態。

2010年2月9日 星期二

Reading:天安門

More about 天安門
天安門(The Gate of Heavenly Peace)
史景遷 著/時報文化
出版日:2007/01/29
ISBN:9789571346205


有十幾年沒有重拾歷史書籍,

書架上早被步入社會化過程中的財經、資訊技術類書籍所佔據,

歷史書是學生時代的主力,

國民革命是小學時期對歷史概念的濫觴,

清末的西方列強割據中國,則是對中國近代史深入的開始。

史景遷所著的「天安門」就是從這樣的年代說起。



講到會看完這本書說來真的很意外,

孟津出差前夕的某一天,突然想到好久好久沒讀讀歷史書了,

就在家裡的書櫃找到這本躺了二三年的「天安門」,

原以為只是順手翻翻幾頁以輔助我入睡,

想不到竟然意外的陪了我出差一整週,及後來上下班捷運通勤時間,

對於閱讀速度緩慢的我,也耐心的花了二十天讀完它,

其實對於平時習慣於焦慮狀態的上班族而言,

要心無旁騖的投入書中所寫的內容和情境其實並不容易,

但是描述歷史或時代人物的題材就很容易把人拉到它的字裡行間裡,

可以暫時忘卻待辦清單所帶來的催促感,讓心理在不急不徐的速度裡去理解那個年代的世態。



史景遷從1894年甲午戰爭的失利起,用不同於以往大歷史觀的角度來看待清末這個變局,

以時代人物的生活背景來併湊整起歷史事件的原貌與影響,

用這樣的形式去舖陳不同歷史發展的楔子,而不是條列式的去講述單一事件,

例如康有為主張漸式的憲政體制-「君主立憲」與孫中山在海外主張的激進式革命手段間的勢力消長,

是交錯在發生的,古往今來歷史的演進發展不都是循著這樣的模式在進行嗎?

歷史是很多條線同時並列,時而平行,時而交錯。

他以微觀的手法描述,

講述了丁玲與胡也頻一同投身無產階級革命所產生的情感,

也講述了徐志摩追求林徽因對梁啟超來帶來的困擾,

甚至是梁啟超在徐志摩與陸小曼的婚禮致辭上如何的數落這對新人,

用當代俱代表性人物的生活來勾勒出大歷史發展的架構,

讓讀者對一個時代有更深切的認識與解讀。



就如同龍應台以眾多小人物的段斷,

試圖去告訴讀者一九四九年到底發生了什麼事一樣,

讓讀者產生切身感,用同理心去理解那段變革,

那樣的理解其實是很震撼人心的。

2010年2月6日 星期六

Python: OptionParser的使用

Python 很好用的 Option module....


==================================================================

轉自:http://www.javaworld.com.tw
dummycat edited on 2005-01-13 23:58

簡介:
optparse 是一個能夠讓程式設計人員輕鬆設計出簡單明瞭、易於使用、符合標準的 Unix 命令列程式的 Python 套件。開始學習 Python 之後,我常常會寫一些小程式來處理日常的工作;漸漸地,我發現無法處理參數的程式的彈性有限,於是就開始為我的程式加上解讀命令列參數的功能。在發現這個 套件之前,我總是覺得解讀命令列不難,但是要做到像標準 Unix 命令那樣完善的使用者互動和錯誤處置,可就不是一件簡單的事了!某天在 Python Library Reference 中發現這個套件,真是如獲至寶!從此不用再為解讀參數煩惱,可以更專注在解決問題上了!

如果對於 optparse 套件有興趣,想快速入門的話,可以直接看"基本使用流程"小節,然後再看後面的一些介紹與說明;當然啦!想獲得最詳細的資訊,就只有自己去看 Python Library Reference 囉~

就以下列命令來解釋一些術語,myprog 是命令的名字, $ 是命令列提示符號:

$myprog -f thefile.txt -s xyz a1 a2 a3


●argument:
使 用者在命令後面所輸入的字串。以本例來說,"-f", "thefile.txt", "-s", "xyz", "a1", "a2", "a3" 都是 argument。在 Python 中,可以使用 sys.argv[1:] 來得到命令列傳進來的 argument。為什麼是 sys.argv[1:] ,而不是 sys.argv 呢?因為命令列收到完整的參數還要加上一個命令本身的檔名,以本例來說, sys.argv 應該是:

["myprog", "-f", "thefile.txt", "-s", "xyz", "a1", "a2", "a3"]


所以如果要得到去除命令本身的檔名以後的參數列,就要靠 sys.argv[1:] 了。

●option:
一些傳遞給命令的額外 argument,以改變程式的行為。以本例來說, "-f", "-s" 就是 option。
有 幾種 option 的寫法,在 Unix 系統上的傳統寫法是 "-" 後跟著一個字母,例如 "-f", "-s";以及 "-f -s", 和 "-fs", 在 Unix 系統上都可以被接受。 GNU project 使用另一種方式,以 "--" 後面跟著一串由 "-" 分開的字串,例如 "--file-for-log"。Python 的 optparse 套件只接受以上所提的兩種 option 格式。

顧名思義, option 應該是可有可無的,即使命令中沒有任何的 option,程式也應該能夠正確地執行。如果程式需要使用者輸入某些資料才能運作,那麼也應該是使用 positional argument 才對。

●option argument:
緊 跟隨在 option 後的 argument,就是 option argument。以本例來說, "thefile.txt", "xyz" 都是 option argument。指定 option argument 有兩種寫法, "-f thefile" 和 "-fthefile", optparse 套件都接受。

option 亦可以沒有 option argument,意即 option 單獨存在。這樣的 option 通常做為旗標 (flag) 用,代表某個功能的開啟或是關閉。

●positional argument:
當一個 argument list 被解讀完後,剩下的就是 positional argument 了!以本例來說, "a1", "a2", "a3" 就是 positional argument。通常被用在"使用者必須輸入"的資訊上。

●required option:
一 個有點讓人覺得矛盾的名詞:既然是 "option" (選擇),又怎麼會是 "required" (必須)的呢? optparse 套件不對這種 option 做出任何的限制或是協助。詳情可以參閱 Python Library Reference 6.20.5 的範例程式。

基本使用流程:

》1.產生一個 optparse.OptionParser 的物件。可以在產生時將"程式的命令列說明" (usage) 做為參數,交給 OptionParser 的建構子:

from optparse import OptionParser
MSG_USAGE = "myprog[ -f ][ -s ] arg1[, arg2...]" 
optParser = OptionParser(MSG_USAGE)


》2.呼叫 OptionParser.add_option() 加入接受的 option:

optParser.add_option("-f","--file",action = "store",type = "string",dest = "fileName")


參數 action 有許多種類,預設是 "store",所以即使省略也無妨,其它的 action 種類在下面會繼續說明。

若有一個以上的 option,重覆上述的方式加入(注意:以下省略了 action 參數):

optParser.add_option("-s","--someopt",type = "string",dest = "someopt")

》3. 呼叫 OptionParser.parse_args() 進行解讀。如果沒有傳入參數, OptionParser 預設會以 sys.argv[1:] 為對象進行解讀。OptionParser.parse_args() 會傳回一個 tuple,由 optparse.Values 和 一個 list 所組成。下例傳入一個假造的參數列:

fakeArgs = ['-f', 'thefile.txt', '-s', 'xyz', 'arg1', 'arg2', 'arge']


options, args = optParser.parse_args(fakeArgs)


print options.fileName
print options.someopt
print args


最後會得到的輸出結果:

thefile.txt
xyz
['arg1', 'arg2', 'arge']


這 是一個簡單的範例,說明了 OptionParser 的一般使用方式。透過這個例子,可以看到如果為程式加入 option, 並且在程式中取得 option argument 和 positional argument。OptionParser.parse_args() 還有許多用法,下面會說明一部份。

為程式加入 flag option:

許多的 Unix 命令擁有 "-v", "-q" 的 option,代表"提供詳細訊息"或是"不顯示訊息"。要做到這一點,只要在程式中加入下列的 option :

parser.add_option("-v", action="store_true", dest="verbose")
parser.add_option("-q", action="store_false", dest="verbose")
opts, args = parser.parse_args()


第 一個 add_option() 加入了一個 "-v" 的 option;如果命令列參數中出現了 "-v",則 opts.verbose 將會是 True;相反的,第二個 add_option() 加入了一個 "-q" option;如果命令列參數中出現了 "-q",則 opts.verbose 將會是 False,這兩者並不相悖,程式可以設計成:當收到 "-v" 時,顯示詳細訊息;當收到 "-q" 時,顯示概略訊息,或完全不顯示;當兩者都沒有收到,則顯示一般的訊息。

設定 option 的預設值:

上述的例 子都假設命令例會收到預期中的 option,那麼如果沒有 option 時,接收到的 option 值會是什麼呢?答案是 None!如果想為 option 提供預設值,只要在 OptionParser.parse_args()中指定參數 default 就行了:

parser.add_option("-v", action="store_true", dest="verbose", default = True)
parser.add_option("-q", action="store_false", dest="verbose")
opts, args = parser.parse_args()


上述的程式碼為程式加入了兩個 option,當 "-v" 沒有出現時, opts.verbose 預設值為 True;當 "-q" 被指定時, opts.verbose 被設定為 False,和上一個例子有點不同。再看下一個例子:

parser.add_option("-v", action="store_true", dest="verbose", default=False)
parser.add_option("-q", action="store_false", dest="verbose", default=True)

opts.verbose 的預設值會是什麼?答案是 True,最後一個指定到同一個目標的 option 預設值會被採用。

一般的 option 亦可加入預設值:

parser.add_option("-f", action="store", dest="fileName", default = "defaultConfig.txt")


為程式加入說明:

標準的 Unix 命令大多有著 "-h", "--help" 的 option,會將使用說明印出來。在 OptionParser.parse_args() 中指定 "help" 參數,並指定說明的字串,就可以為這個 option 加入說明了:


parser.add_option("-v",action="store_true",dest="verbose",default=False,help="make lots of noise [default]")


當程式收到 "-h" 或 "--help",交給 OptionParser 解讀時,會自動印出說明內容,而忽略其它的 argument:

usage: [options] arg1 arg2 


options:
-h, --help show this help message and exit
-v, --verbose make lots of noise [default]
-q, --quiet be vewwy quiet (I'm hunting wabbits)
-fFILE, --file=FILE write output to FILE
-mMODE, --mode=MODE interaction mode: one of 'novice', 'intermediate'
[default], 'expert'


還 記得一開始提到交給 OptionParser 建構子的參數 MSG_USAGE 嗎? optparse 套件對 usage 訊息也提供了一些支援。在 usage 中使用 "%prog" 關鍵字, OptionParser 會自動將其代換為程式名,即 sys.args[0]:

usage = "usage: %prog [options] arg1 arg2"


如果程式名為 "myprog",則出現在 help 訊息中的 usage 就會是:

usage = "usage: myprog [options] arg1 arg2"


如果OptionParser 建構子沒有收到任何參數,則會自動產生一個 usage 訊息:


"usage: %prog [options]"


前提是程式沒有 positional argument。甭擔心 option 在 help 訊息中排列的方式, OptionParser 會搞定一切,如同前面程式所示。

替 option 分門別類:

如果能夠在 help 訊息中,將性質相近的 option 放在一起,與其它 option 明顯區別開來,相信使用者在閱讀時,就能夠很快地查到所要的資訊了。 optparse 套件提供了將 option 以 group 分開的機制:

group = OptionGroup(parser, "Dangerous Options",
"Caution: use these options at your own risk. "
"It is believed that some of them bite.")
group.add_option("-g", action="store_true", help="Group option.")
parser.add_option_group(group)

首 先產生一個 OptionGroup 物件,將 OptionParser 和 help 訊息當做參數交給建構子,然後呼叫 OptionGroup.add_option() 加入 option,最後再呼叫 OptionParser.add_option_group() 加入此 group。如此 help 訊息中的 option 就會按 group 顯示了!

usage: [options] arg1 arg2


options:
-h, --help show this help message and exit
-v, --verbose make lots of noise [default]
-q, --quiet be vewwy quiet (I'm hunting wabbits)
-fFILE, --file=FILE write output to FILE
-mMODE, --mode=MODE interaction mode: one of 'novice', 'intermediate'
[default], 'expert'

Dangerous Options:
Caution: use of these options is at your own risk. It is believed that
some of them bite.
-g Group option.

顯示程式版本:

無論是 GUI 或是 CUI 程式,使用者都會關心目前的程式版本資訊。 optparse 套件也提供了版本資訊的支援:

parser = OptionParser(usage="%prog [-f] [-q]", version="%prog 1.0")


在 OptionParser 建構時指定 version 參數,並將提供版本訊息(先前提到的 "%prot" 關鍵字亦可用在此處)。當使用者下達的命令中帶有參數 "---version" (只有 "-v" 不行)時,程式會顯示版本資訊:

$/usr/bin/foo --version
foo 1.0

指定讀入 option argument 的個數:

add_option() 有一個參數 nargs,用以指定該 option 會從命令列上讀入幾個 option argument。舉例來說,如果 add_option(..., narg = 3, ...):

$myprog --file w x y z


則 opts.file 將會是一個 tuple,內容為 ('w', 'z', 'y')。如果 option argument 個數不足,程式會回應錯誤訊息。

type of an option:

在 加入 option 時,參數 type 代表該 option 儲存 dest 的型態。支援的型態有 string, int, long, choice, float 和 complex。若要加入其它型態,請參考 Python Library Reference 6.20.5 小節,"Extending optparse"。
對於 string 型態的 option, option argument 會被直接將結果存入 dest。

對於 int, long, float 和 complex 型態, option argument 會被轉換成相對應的型別;如果轉換的過程失敗,例如原本預期收到一個 int,卻收到一個字串,程式會結束並列印錯誤訊息。

對 於 choice 型態, 在呼叫 OptionParser.add_option() 要指定一個由字串所組成的 tuple 或 list 給 choice 參數,接著 OptionParser.check_choice() 會比對傳入的 option argument 是否和 choice tuple 或 choice list 相同,若不相同則會丟出 OptionValueError。

action of an option:

在加入 option 時,參數 action 代表對 option argument 所要進行的動作。參數 action 有下列幾種:

  • store : 預設的 action,將 option argument 存到指定的 dest。
  • store_const : 將 dest 的值設為一個給定的常數。
  • make_option("-q", "--quiet", action="store_const", const=0, dest="verbose"), make_option("-v", "--verbose", action="store_const", const=1, dest="verbose"), make_option("--noisy", action="store_const", const=2, dest="verbose"), 當 "--noisy" 出現時, opts.verbose 的值將會被設定成 2。
  • store_true : 將 dest 的值設定為 True。
  • store_false : 將 dest 的值設定為 False。
  • append : 將 option argument 增加到 dest 中,而 dest 的型態將會是 list。使用 append action 時,命令列中可以重覆出現 option 和 option argument:

    $myprog -f 1 -f 2 -f 3


    則 opts.optargs 將會是 ['1', '2', '3']。如果是 store action,那麼 opts.optargs 將只會是 3,因為每指定一次 option, dest 的值就一直被更新。

    若呼叫 add_option() 時參數 nargs 被設定,而 action = append 時,程式可以接受下列命令列參數:

    parser.add_option(dest = "optargs",action = "append",nargs = 3)
    ...
    print opts.optargs


    -----------------------------

    $myprog -f 1 2 3 -f 4 5 6 -f 7 8 9
    [('1', '2', '3'), ('4', '5', '6'), ('7', '8', '9')]



    看出其中差異了嗎? nargs 會將 option argument 包裝成 tuple,而 append 參數會將包裝好的 tuple 再"附加"到原有的 list 中。
  • count : 將 dest 的值加 1。 dest 的值會被初始會 0,該 option 每出現一次, dest 的值就增加 1。
  • callback : 請參考 Python Library Reference 6.20.4。
  • help : 列印 help 訊息。
  • version : 列印程式版本。


錯誤處置:
如果 option 預期會收到一個 int,而使用者傳入的是 string 參數時,會發生什麼事?

optParser.add_option("-n",dest = "theNumber",type = "int")


若使用者輸入的命令是:

$ /usr/bin/foo -n abc


程式會發出錯誤訊息,並告知使用者輸入的參數有誤,並且以非零的回傳值結束:

usage: foo[ -n


foo: error: option -n: invalid integer value: 'abc'


OptionParser 的一些操作方法:

在加入 option 或解讀完參數之後,可以透過 OptionParser 的一些方法來得到一些資訊(以下的 opt_str 就是 "-f", "--file" 這些在增加 option 時所用到的參數):


  • has_option(opt_str) : 檢查 OptionParser 中是否有某個 option。
  • get_option(opt_str) : 取得 OptionParser 中的某個 option。
  • remove_option(opt_str) : 刪除 OptionParser 中的某個 option。


當 option 發生碰撞(重覆)時:

option 以下列的方式加入時:

parser.add_option("-n", "--dry-run", ...)
...
parser.add_option("-n", "--noisy", ...)


就稱為"碰撞"。當 option 碰撞時, optparse 會丟出 OptionConflictError。程式設計師應該在設計期就解決掉這個問題,也就是說,不應該使用 try - except 來捕捉這個錯誤 - 畢竟這在設計期就可以被處理掉的。

當 OptionParser 的被繼承時,一些標準的 option 就很有可能被子類別覆蓋掉。這種情況下,可以設定 OptionParse 處置碰撞的方式:

parser.set_conflict_handler("resolve")
or
parser = OptionParser(..., conflict_handler="resolve")

都 可以讓後來加入的 option 覆蓋掉原有的 option。預設的 conflict_handler 值為 "error",也就是直接丟出 OptionConflictError。所謂覆蓋,也不是直接移除掉原有的 option,而是避開後來加入的 option:

parser = OptionParser(conflict_handler="resolve")


parser.add_option("-n", "--dry-run", ..., help="original dry-run option")
...
parser.add_option("-n", "--noisy", ..., help="be noisy")


在 help 訊息中,就會看到:

options:
--dry-run original dry-run option
...
-n, --noisy be noisy


第一個 option 的 "-n" 被刪去了。如果這時又加入一個 option,使用了 "--dry-run"做為名稱呢?那麼第一個 option 就會直接被移除,因為它已經完全被覆蓋掉了,程式將不認得它, help 訊息中也不會有它的蹤跡。

在這裡我省略了 Callback option 和 Extending optparse 兩個小節,如果有興趣,可以親閱 Python Library Reference;對於這篇文章若有疑問的,也可以先找找 Reference,也許我漏掉了也說不定。

程 式寫得愈多,愈覺得自己的渺小。這些設計精良的套件,若不是當初由許多無私的前輩們開發出來,我們又怎麼夠享受到它的便利性?以上是我參考 Python Library Reference, 6.19 optparse 介紹的內容,所寫的心得筆記。希望對這裡的 Python 同好有幫助,如果有錯誤也請多指正!


void optparse::OptionParser::add_option(std::string shrt_flag,


std::string lng_flag,


std::string destination,


std::string help = "",


action_t act = STORE,


type_t type = STRING,


std::string dfault = "",


std::string allowed_values""

)



Add an option to the parser.

Parameters:





shrt_flag Short option name, like e.g. "-q".

lng_flag Long option name, like e.g. "--quiet"

destination Key under which the option argument is stored in the dictionary.

help Help string for generating the usage info.

act Action, one of STORE, STORE_TRUE, STORE_FALSE.

type Type info of the expected option argument. One of INT, DOUBLE, STRING, BOOL.

dfault Default value. Value stored in the dictionary if the option is not given.

allowed_values List of possible option values. A string of comma-separated allowed values. An empty string means that any value is allowed.

2010年2月2日 星期二

對話

這對話~

從公車上延續到火車站的閘口,

沒有爭執,只有冷靜的對談,

迷惑~  疑問~  語畢~  散場~

持續多年這個似有若無的故事,

在這熙來人往的車站中,

繞了一圈又回到原點。

生命的紛擾,在這裡又是一個起承轉合,

獨自漫步在人群裡思索這一個轉折,

沒有傷感,只有茫然。

##EasyReadMore##