2012-07-20 53 views
3

我想在python中使用argparse和日誌記錄模塊。我有一個運行的程序,它有很多可能的選項,我已經成功實現了argparse模塊來處理這個任務。在python中記錄argparse的值

我想記錄每個選項在程序運行時的值並將其發送到日誌文件。我嘗試了以下幾件事情,並將其中包含的相關錯誤作爲註釋加入其中。

parser = argparse.ArgumentParser() 
parser.add_argument('input', action="store", default='fort.13', type=str) 

args = parser.parse_args() 

# First try: 
logging.info("Input args: " + args) 
# TypeError: cannot concatenate 'str' and 'Namespace' objects 

# Second try: 
for x in args: 
    logging.info(x) 
# TypeError: 'Namespace' object is not iterable 

這樣做的正確方法是什麼?

回答

7

您可以使用vars讓您解析參數的屬性:

for arg, value in sorted(vars(args).items()): 
    logging.info("Argument %s: %r", arg, value) 

這在the docs詳細說明。

+0

我認爲你需要調整它爲'logging.info(「Argument%s:%r」%(n,v))''。一個奇怪的行爲,但是,當我將它添加到我的代碼,它不再輸出.log文件。當我將它註釋掉並重新運行時,日誌文件仍然存在。任何原因,這應該是奇怪的日誌文件是否寫入? – JBWhitmore 2012-07-20 02:02:50

+0

我已經調整了代碼幾次... – 2012-07-20 02:04:54

+0

@JBWhitmore:使用日誌記錄模塊,你不會自己做字符串格式化,你可以讓日誌記錄執行它。我不知道你的日誌文件出了什麼問題...... – 2012-07-20 02:05:37

1
logging.info("Input args: %r", args) 

只是將整個Namespace對象包含在日誌中的一行中的所有參數。