我有这个清单
commands = ['cd var','cd www','cd html','sudo rm -r folder']
我试图将其中的所有元素作为bash脚本一一执行,但没有成功。我在这里需要for循环吗?
如何实现?,谢谢大家!!!!
答案 0 :(得分:3)
for command in commands:
os.system(command)
是您可以使用的一种方法...尽管仅将CD压缩到一堆目录中并不会产生很大的影响
注意,这将在其自己的子外壳中运行每个命令……因此它们将不记得其状态(即任何目录更改或环境变量)
如果您需要在一个子外壳中全部运行它们,而无需将它们与“ &&”链接在一起
os.system(" && ".join(commands)) # would run all of the commands in a single subshell
如注释中所述,通常最好将子流程模块与check_call
或其他变体之一一起使用。但是在这种特定情况下,我个人认为您与其他人之间的差距是6比1,而os.system
的键入较少(无论您使用的是python3.7还是python2.5,它都会存在。 。,但一般情况下,subprocess
的确切调用方式取决于您使用的python版本... @triplee why you should use subprocess instead)的注释链接在帖子中有一个很好的描述
确实,您应该重新格式化命令以使其简单
commands = ["sudo rm -rf var/www/html/folder"]
请注意,您可能需要将python文件添加到sudoers文件中
我也不确定您要在这里完成什么工作...但是我怀疑这可能不是解决问题的理想方法(尽管它应该可以工作...)
答案 1 :(得分:3)
这只是一个建议,但是如果您只想更改目录并删除文件夹,则可以使用os.chdir()
和shutil.rmtree()
:
from os import chdir
from os import getcwd
from shutil import rmtree
directories = ['var','www','html','folder']
print(getcwd())
# current working directory: $PWD
for directory in directories[:-1]:
chdir(directory)
print(getcwd())
# current working directory: $PWD/var/www/html
rmtree(directories[-1])
将cd
深入html
的三个目录,并删除folder
。调用chdir()
时,当前工作目录会更改,就像调用os.getcwd()
时一样。
答案 2 :(得分:1)
declare -a command=("cd var","cd www","cd html","sudo rm -r folder")
## now loop through the above array
for i in "${command[@]}"
do
echo "$i"
# or do whatever with individual element of the array
done
# You can access them using echo "${arr[0]}", "${arr[1]}" also