2011-06-07 37 views
3

執行長慶典序列我想這樣做:如何使用Python子

猛砸代碼:

grub --batch << EOF 
root (hd0,1) 
find /boot/grub/menu.lst 
setup (hd0) 
quit 
EOF 

Python代碼:

subprocess.call('grub --batch << EOF', shell=True) 
subprocess.call('root (hd0,1)', shell=True) 
subprocess.call('find /boot/grub/menu.lst', shell=True) 
subprocess.call('setup (hd0)', shell=True) 
subprocess.call('quit', shell=True) 
subprocess.call('EOF', shell=True) 

但是,這並不工作.. 有人現在是解決這個問題的另一種方法?

非常感謝!

+0

使用換行符對整個命令執行一次「subprocess.call」調用。 – 2011-06-07 14:35:47

+0

是的,我也是這麼想的。但沒有工作! – JonatasTeixeira 2011-06-07 14:46:05

回答

1

你可以做喜歡的事,太可怕了:

subprocess.call('echo -e "root (hd0,1)\nfind /boot/grub/menu.lst\nsetup (hd0)\nquit" | grub --batch', shell=True)

我敢肯定有一個更好的辦法,雖然做到這一點。

+0

完美.. 謝謝..我會盡量把這個代碼放在項目裏面。 但我認爲這將工作。 謝謝你! – JonatasTeixeira 2011-06-07 14:43:07

5

的解決方案是發送腳本作爲一個字符串:

script = ''' 
root (hd0,1) 
find /boot/grub/menu.lst 
setup (hd0) 
quit 
''' 
print subprocess.Popen('grub', stderr=subprocess.STDOUT).communicate(script)[0] 

shell=True不應該是必要的。

+1

+1:使用Python(或任何其他語言)嵌入shell是引入維護頭痛的好方法。你受限於需要grub來完成繁重的工作,但是要儘可能地像Aaron那樣使用內在的Python工具。 – msw 2011-06-07 15:03:43