Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
哪一个是执行命令的最佳python模块_Python_Linux_Shell_Command - Fatal编程技术网

哪一个是执行命令的最佳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的更改对于子流程调用没有用处。我

我想使用python脚本执行各种
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=
参数传递给将来的命令,如果它们都应该从该目录运行的话。