哪一个是执行命令的最佳python模块
我想使用python脚本执行各种哪一个是执行命令的最佳python模块,python,linux,shell,command,Python,Linux,Shell,Command,我想使用python脚本执行各种Linux命令/操作。我将使用输出,验证/处理它,并继续在脚本中执行更多命令,有时也可能是远程执行 我尝试了os和子流程模块。这里需要注意的是,我无法将两者结合起来,即从一个模块执行的系统调用或命令不会影响“program/python”环境变量,而只是由该特定模块考虑 因为。前 os.chdir(dirname) os.system(cmd) # p = subprocess.Popen(cmd) 现在,这里来自os.chdir的更改对于子流程调用没有用处。我
Linux
命令/操作。我将使用输出,验证/处理它,并继续在脚本中执行更多命令,有时也可能是远程执行
我尝试了os
和子流程
模块。这里需要注意的是,我无法将两者结合起来,即从一个模块执行的系统调用或命令不会影响“program/python”环境变量,而只是由该特定模块考虑
因为。前
os.chdir(dirname)
os.system(cmd)
# p = subprocess.Popen(cmd)
现在,这里来自os.chdir
的更改对于子流程调用没有用处。我们必须坚持他们中的任何一个。如果使用子流程
,则必须为其传递/创建shell命令
添加:
cwd=
是子流程的解决方案。Popen
但是每次我都必须将选项cwd
作为参数传递给将来的命令,如果它们都应该从该目录运行的话
有没有更好的方法让我们可以同时使用这两个模块 或 是否有其他更好的模块可用于命令执行
我还想知道这两个模块的“优缺点/注意事项”。
os.system
始终运行/bin/sh
,解析命令字符串。如果在命令参数中有空格、$
等,或者用户有一个shell配置文件,则可能存在安全风险。要避免所有此类风险,请使用带有字符串列表或元组的子流程
,作为命令(shell=False
)
要在命令中模拟
os.chdir
,请使用subprocess
@jozefg中的cwd=
参数,我之前已经访问过这个问题。这更多的是关于如何执行一个命令,而不是整个脚本。我的问题是,如果我想组合来自os
和子流程的函数,那么我该如何做?如果在Python脚本中使用内部shell命令,那么就错了(你应该坚持使用sh
脚本)。如果要运行其他可执行文件,子流程
是正确的模块。任何人(包括您)只要正确阅读子流程
文档,都可以回答您的所有问题。请看一下特使
:子流程
一开始可能有点违反直觉,特使
简化了shell脚本的用例,例如,os.system
和os.chdir
。假设我想用不同的用户运行命令。我有os.setuid()
,在子进程中,我必须执行su user cmd
。而且每次使用子进程时,我都必须将cwd=
参数传递给将来的命令,如果它们都应该从该目录运行的话。