2013-04-22 18 views
1

我有一個RRD數據庫,我正在嘗試創建,並且我編寫了一個用於構建命令的工具,可以正常工作,並生成預期的輸出。當我真的嘗試在Python中運行rrdtool.create命令時出現問題。這個循環產生一個字符串,我們將其稱之爲rrdStr,包含以下內容:正確的,據我可以告訴Python rrdtool.create()

'"0x04.rrd", "--step","5", 
"DS:TEMP:GAUGE:10:0:100", 
"DS:HUMIDITY:GAUGE:10:0:100", 
"DS:LIGHT:GAUGE:10:0:1024", 
"DS:POT:GAUGE:10:0:1024", 
"RRA:AVERAGE:0.5:1:17142", 
"RRA:MIN:0.5:1:17142", 
"RRA:MAX:0.5:1:17142", 
"RRA:AVERAGE:0.5:12:7200", 
"RRA:MIN:0.5:12:7200", 
"RRA:MAX:0.5:12:7200", 
"RRA:AVERAGE:0.5:60:8640", 
"RRA:MIN:0.5:60:8640", 
"RRA:MAX:0.5:60:8640", 
"RRA:AVERAGE:0.5:360:17532", 
"RRA:MIN:0.5:360:17532", 
"RRA:MAX:0.5:360:17532"' 

所有報價和換行符被轉義。

如果我通過了rrdtool.create這樣的字符串變量:rrdtool.create(rrdStr),我得到的輸出

rrdtool.error: you must define at least one Round Robin Archive 

但是,如果我複製和上面的輸出直接粘貼到rrdtool.create()功能,它像它應該到,並創建數據庫。

任何想法是什麼導致這種情況,以及如何解決它?

回答

1

所以我終於明白了。不是創建一個包含所有格式正確的命令的長字符串,您必須創建一個列表,每當生成命令時,rrd命令的每一行都會添加到列表中。

上面的命令變爲:

rrdStr = ["0x04.rrd", "--step","5"] 
rrdStr += ["DS:TEMP:GAUGE:10:0:100"] 
rrdStr += ["DS:HUMIDITY:GAUGE:10:0:100"] 
rrdStr += ["DS:LIGHT:GAUGE:10:0:1024"] 
rrdStr += ["DS:POT:GAUGE:10:0:1024"] 
rrdStr += ["RRA:AVERAGE:0.5:1:17142"] 
rrdStr += ["RRA:MIN:0.5:1:17142"] 
rrdStr += ["RRA:MAX:0.5:1:17142"] 
rrdStr += ["RRA:AVERAGE:0.5:12:7200"] 
rrdStr += ["RRA:MIN:0.5:12:7200"] 
rrdStr += ["RRA:MAX:0.5:12:7200"] 
rrdStr += ["RRA:AVERAGE:0.5:60:8640"] 
rrdStr += ["RRA:MIN:0.5:60:8640"] 
rrdStr += ["RRA:MAX:0.5:60:8640"] 
rrdStr += ["RRA:AVERAGE:0.5:360:17532"] 
rrdStr += ["RRA:MIN:0.5:360:17532"] 
rrdStr += ["RRA:MAX:0.5:360:17532"] 

然後,您可以通過列表上的唯一命令rrdtool.create(rrdStr)失敗之前那麼就會成功運行

-1

使用rrdtool.create(* rrdStr)同樣的命令python2.6 rrdtool-python-1.3.8-6.el6.x86_64