【问题标题】:Which is the best python module for command execution [duplicate]哪个是用于命令执行的最佳 python 模块 [重复]
【发布时间】:2013-10-03 17:37:10
【问题描述】:

我想使用 python 脚本执行各种Linux 命令/操作。我将使用输出,验证/处理它并继续在我的脚本中执行更多命令,有时也可能是远程执行。

我已经尝试过 ossubprocess 模块。这里需要注意的是,我无法将它们两者结合起来,即从一个模块执行的系统调用或命令不会影响“程序/python”环境变量,而只会被该特定模块考虑。

为了。前任。

os.chdir(dirname)
os.system(cmd)
# p = subprocess.Popen(cmd)

现在,os.chdir 的更改对子进程调用没有用处。我们必须坚持其中任何一个。如果我使用subprocess,我必须为其传递/创建 shell 命令。


添加: cwd=subprocess.Popen 的解决方案,但每次我都必须将选项 cwd 作为参数传递给未来的命令,如果它们都应该从该目录运行


有没有更好的方法可以同时使用这两个模块?

或者

还有其他更好的模块可用于命令执行。

我也想知道这两个模块的“优缺点/注意事项”。

【问题讨论】:

  • @jozefg 我之前已经访问过这个问题。它更多的是关于我如何执行一个命令,而不是整个脚本。我的问题是多个命令,如果我想组合来自ossubprocess 的函数,我该怎么做?
  • 如果您在 Python 脚本中使用内部 shell 命令,那么您做错了(您应该坚持使用 sh 脚本)。如果您想运行其他可执行文件,subprocess 是正确的模块。正确阅读subprocess 文档的任何人(包括您)都可以回答您的所有问题。
  • 看看envoy: github.com/kennethreitz/envoy subprocess 一开始可能有点反直觉,envoy 简化了 shell 脚本等用例的事情。跨度>

标签: python linux shell command


【解决方案1】:

os.system 始终运行 /bin/sh,它会解析命令字符串。如果命令参数中有空格、$ 等,或者用户有 shell 配置文件,这可能会带来安全风险。为避免所有此类风险,请使用 subprocess 和字符串列表或元组作为命令 (shell=False)。

要在命令中模拟os.chdir,请在subprocess 中使用cwd= 参数。

【讨论】:

  • os.systemos.chdir 是更多示例。假设我想用不同的用户运行命令。我有os.setuid(),在子进程中我必须做su user cmd
  • 还有子进程,每次我都必须将cwd= 参数传递给未来的命令,如果它们都应该从那个目录运行的话。
猜你喜欢
  • 2011-12-15
  • 1970-01-01
  • 2016-10-12
  • 2020-05-05
  • 2021-12-31
  • 1970-01-01
  • 2015-01-15
  • 2021-11-18
  • 2014-01-22
相关资源
最近更新 更多