![python 2.7 和 3.6 中命令库的替代方案](https://linux22.com/image/133054/python%202.7%20%E5%92%8C%203.6%20%E4%B8%AD%E5%91%BD%E4%BB%A4%E5%BA%93%E7%9A%84%E6%9B%BF%E4%BB%A3%E6%96%B9%E6%A1%88.png)
那里没有收到任何答案,所以在这里交叉发布。
我只是想知道替代方案
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
保持其余代码不变,它将按原样工作