Python在shell

时间:2018-03-13 23:01:34

标签: python bash

假设您有一堆命令将被输入shell

export x=1
cd foo/the\ bar/baz
grep x y z
cd "the/quoted path"
ls -l

要运行单个命令,您可以执行以下操作:

subprocess.run(['ls','l'])

但命令不是独立的。以后的命令依赖于早期的命令,导出的变量等。运行这些命令的pythonic方法是什么,好像这些是shell脚本中的代码行?有没有办法使用shell = True“禁忌”?

# DOESN'T work, each run is independent:
for c in cmds: 
    subprocess.run(c, shell=True)

# Seems to work but is mashing everything into a giant string the best way?
subprocess.run(';'.join(cmds), shell=True)

1 个答案:

答案 0 :(得分:0)

创建包含所有命令的单个字符串可能是最快捷,最简单的方法。它可能不是最漂亮的,但你总是可以创建一个辅助函数来抽象出字符串连接。

def run_commands(*commands)
    subprocess.run(' ; '.join(commands), shell=True)

然后像这样称呼它

run_commands('cd foo', 'ls')