如何使用Python子进程执行长bash序列

时间:2011-06-07 14:26:00

标签: python bash subprocess

我想这样做:

Bash代码:

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)

但这不起作用.. 有人现在是解决这个问题的另一种方法吗?

非常感谢!

2 个答案:

答案 0 :(得分: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)

你可以做一些可怕的事情:

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

我确信有更好的方法可以做到这一点。