【问题标题】:How to execute long bash sequence with Python subprocess如何使用 Python 子进程执行长 bash 序列
【发布时间】:2011-09-10 03:18:00
【问题描述】:

我想这样做:

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)

但这不起作用.. 现在有人解决这个问题的替代方法吗?

非常感谢!

【问题讨论】:

  • 只调用一次subprocess.call,整个命令都带有换行符。
  • 是的,我也这么认为。但是没用!

标签: python bash subprocess


【解决方案1】:

解决方案是将脚本作为一个字符串发送:

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:在 Python(或任何其他语言)中嵌入 shell 是解决维护问题的好方法。你受限于需要 grub 来完成繁重的工作,但尽可能多地使用内部 Python 工具,就像 Aaron 所做的那样。
【解决方案2】:

你可以做一些可怕的事情,比如:

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

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

【讨论】:

  • 完美..谢谢..我会尝试把这段代码放到这里的项目中。但我认为这会奏效。谢谢你!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-31
  • 1970-01-01
  • 2020-07-25
  • 2019-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多