python 2.7 和 3.6 中命令库的替代方案

python 2.7 和 3.6 中命令库的替代方案

我原来的问题在这里:https://stackoverflow.com/questions/50164551/starting-a-process-with-a-shell-possible-injection-Detected-security-issue

那里没有收到任何答案,所以在这里交叉发布。

我只是想知道替代方案
import commands
commands.getoutput()

命令库。
有没有办法使用操作系统或子进程之类的东西来做到这一点?

答案1

commands已弃用,应替换为subprocess调用。的替代品commands.getoutput()subprocess.Popen().communicate()

import subprocess
import shlex


command = shlex.split('/bin/ls -l -a -h')
process = subprocess.Popen(command, stdout=subprocess.PIPE)
stdout, stderr = process.communicate()

bandit可能仍然会给你带来一个低严重性问题,因为你仍然使用subprocess它本身作为调用 shell 的任何内容都是不安全的,但这是不可避免的。将剩余的警告视为代码中潜在不安全性的提醒 - 取决于您在 shell 中实际调用的内容,您必须自己进行检查 - 它是硬编码在字符串常量中的命令,还是用户输入,或者取决于调用代码的变量?无论如何,总是建议进行清理,Python 有pipes模块为了那个原因。

答案2

subprocess根据hoefling的回答,“标准”方法是,但如果您不介意使用外部库,则可以使用一些更现代的方法。

使者已被弃用委托人它看起来是这样的:

In [1]: import delegator

In [2]: print delegator.run('pwd').out
/home/vince

我安装了它:

pip install git+https://github.com/kennethreitz/[email protected]

答案3

import subprocess

commands = subprocess

保持其余代码不变,它将按原样工作

相关内容