因此,我試圖從一個python腳本發出這個命令,該腳本收集集羣中預定數目的節點上的cpu信息。在這裏我使用2的扇出,並且僅在節點b127到b129上運行它以用於測試目的。使用pdsh通過linux解析內聯python命令
pdsh -f2 -w b[127-129] 'python -c "import multiprocessing
num_cpu = multiprocessing.cpu_count()
stat_fd = open('/proc/stat')
stat_fd.close()"'
我打印了命令,這就是它在終端上顯示的內容。因此,告訴我引號和命令格式正確。我通過執行以下代碼得到這個字符串:
python_command = "'python -c "\
+ "\"import multiprocessing\n"\
+ "num_cpu = multiprocessing.cpu_count()\n"\
+ "stat_fd = open(\'/proc/stat\')\n"\
+ "stat_fd.close()\"'"
command = "pdsh -f2 -w b[127-129] " + python_command
print command
不幸的是,開放式(\「的/ proc/STAT \」)似乎是問題,因爲這是導致解析器失敗的唯一行的行由於嵌套的單引號。我已經嘗試過多次引用和轉義的組合,以使其無效。我在文件的打開和關閉之間省略了一些代碼,以儘量減少發佈的代碼。
我周圍搜索,發現這link,但發現它太簡單的例子,因爲我可以複製這些命令。是的,我知道我可以使用bash命令來獲得我想要做的事情,而且我可能會這樣做,但是這個讓我在牆上敲打我的頭。我也有使用top和ps收集數據的腳本,因此我不需要使用它們的解釋。我非常感謝提前的幫助。
使用三重引號是嚴格回答您的問題的方法,但是您可能需要查看[ansible](http://www.ansible.com/)或[fabric](http:// www.fabfile.org/),它可以直接爲Python帶來與pdsh相同的並行SSH功能,避免了過度設計報價對的需要。 – damienfrancois 2014-08-29 12:07:53
我會檢查一下,謝謝你的提示。 – 2014-08-29 13:29:53