我想使用python脚本执行各种Linux
命令/操作。我将使用输出,验证/处理它并继续在我的脚本中执行更多命令,有时也可能是远程执行。
我尝试了os
和subprocess
个模块。这里需要注意的是,我无法将两者结合起来,即系统调用或从一个模块执行的命令不会影响“program / python”环境变量,而只会被该特定模块考虑。
有关。恩。
os.chdir(dirname)
os.system(cmd)
# p = subprocess.Popen(cmd)
现在,来自os.chdir
的更改对于子进程调用没有用。我们必须坚持使用其中任何一个。如果我使用subprocess
,我必须为它传递/创建shell命令。
已添加: cwd=
是subprocess.Popen
的解决方案,但每次我必须将选项cwd
作为参数传递给将来的命令,如果它们都应该从那个目录运行
有没有更好的方法可以同时使用这两个模块?
或者
是否还有其他更好的模块可用于命令执行。
此外,我想知道这两个模块的“Pros-Cons / Caveats”。
答案 0 :(得分:2)
os.system
始终运行/bin/sh
,它解析命令字符串。如果在命令参数中有空格$
等,或者用户有shell配置文件,则这可能存在安全风险。要避免所有此类风险,请将subprocess
与字符串列表或元组一起用作命令(shell=False
)。
要在命令中模拟os.chdir
,请使用cwd=
中的subprocess
参数。