执行python

时间:2018-11-15 00:42:40

标签: python arrays tuples

我有这个清单

commands = ['cd var','cd www','cd html','sudo rm -r folder']

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

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

3 个答案:

答案 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