【发布时间】:2015-10-08 20:07:17
【问题描述】:
我正在执行一组命令,首先需要我调用bash。我正在尝试通过编写 Python 脚本来自动执行这些命令。我的第一个命令显然需要bash,所以我运行
p = subprocess.call(['bash'])
它启动 bash shell 没问题。
然后我遇到的问题是尝试在 bash 环境中执行剩余的代码。我认为可能需要进程通信(即重定向标准输出,如
p0 = subprocess.Popen(cmd, stdout=subprocess.PIPE)
p1 = subprocess.Popen(['bash'], stdin=p0.stdout)
p1.communicate()
) 但管道似乎无法解决我的问题。
如何编写此脚本以模拟以下顺序 Linux 命令?
$ bash
$ cmd1
$ cmd2
...
我正在使用 Ubuntu 14.04 和 Python 2.7.6。
提前感谢您的指导!
【问题讨论】:
-
这些命令有关系吗?它们是否需要在同一个 shell 会话中运行?它们是否需要在交互式 bash 会话下运行?
-
saltycrane.com/blog/2011/04/… 可能会有所帮助
-
@Busturdust 我实际上已经浏览过那个博客了——但是啊!我错过了可执行参数。这可能行得通!
-
@EtanReisner:这些命令都是相关的。一般来说,我要做的就是打开一个终端,执行
bash,然后执行cmd1。然后打开另一个终端,执行bash再执行cmd2,以此类推。换句话说,每个命令运行一个进程,当我启动后续进程时,该进程必须在 bash 中运行 -
那么我的问题的答案是“否”并且手动运行
bash仅在您的普通shell 不是 已经bash我想。在这种情况下,您可能只想使用subprocess.call(或call_check或该函数的任何更安全版本)命令bash -c cmd(或者如果实际上不需要手动bash,则只需cmd)。