假设您有一堆命令将被输入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)
答案 0 :(得分:0)
创建包含所有命令的单个字符串可能是最快捷,最简单的方法。它可能不是最漂亮的,但你总是可以创建一个辅助函数来抽象出字符串连接。
def run_commands(*commands)
subprocess.run(' ; '.join(commands), shell=True)
然后像这样称呼它
run_commands('cd foo', 'ls')