从 python 执行列表中的 bash 命令

Mau*_*nas 1 python arrays tuples

我得到了这个清单

commands = ['cd var','cd www','cd html','sudo rm -r folder']
Run Code Online (Sandbox Code Playgroud)

我试图将其中的所有元素作为 bash 脚本一一执行,但没有成功。我这里需要一个for循环吗?

如何实现?谢谢大家!!!!

Jor*_*ley 5

for command in commands:
    os.system(command)
Run Code Online (Sandbox Code Playgroud)

这是你可以做到的一种方法......尽管只是 cd'ing 进入一堆目录不会产生太大影响

注意,这将在其自己的子 shell 中运行每个命令...因此它们不会记住它们的状态(即任何目录更改或环境变量)

如果您需要在一个子 shell 中运行它们,则需要用“&&”将它们链接在一起

os.system(" && ".join(commands)) # would run all of the commands in a single subshell
Run Code Online (Sandbox Code Playgroud)

正如评论中所指出的,通常最好将 subprocess 模块check_call与其他变体之一一起使用。然而,在这个特定的例子中,我个人认为你与另一个处于 6 比 1 的状态,并且os.system打字较少(无论你使用 python3.7 还是 python2.5,它都会存在......但在一般情况下使用subprocess到底哪个调用可能取决于您正在使用的 python 版本...@triplee 的评论中链接的帖子中有一个很好的描述,为什么您应该使用 subprocess

实际上你应该重新格式化你的命令以简单地

commands = ["sudo rm -rf var/www/html/folder"]请注意,您可能需要将 python 文件添加到 sudoers 文件中

我也不确定你到底想在这里完成什么......但我怀疑这可能不是实现它的理想方法(尽管它应该有效......)