kRazzy R Asked: 2018-05-10 13:32:48 +0800 CST2018-05-10 13:32:48 +0800 CST 2018-05-10 13:32:48 +0800 CST python 2.7 和 3.6 中命令库的替代方案 772 我最初的问题在这里:https ://stackoverflow.com/questions/50164551/starting-a-process-with-a-shell-possible-injection-detected-security-issue 那里没有收到任何答案,所以在这里交叉发布。 我只是想知道一个替代方案 import commands commands.getoutput() 命令库。 有没有办法使用 os 或 subprocess 之类的东西来做到这一点? python 3 个回答 Voted Best Answer hoefling 2018-05-11T08:17:35+08:002018-05-11T08:17:35+08:00 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模块。 Vincenzo Pii 2018-05-11T11:45:54+08:002018-05-11T11:45:54+08:00 根据 hoefling 的回答,“标准”方式是subprocess,但如果您不介意使用外部库,则可以使用一些更现代的方式。 envoy已被委托人弃用,它的外观如下: In [1]: import delegator In [2]: print delegator.run('pwd').out /home/vince 我安装了它: pip install git+https://github.com/kennethreitz/[email protected] Davish Bhardwaj 2019-11-25T22:32:04+08:002019-11-25T22:32:04+08:00 import subprocess commands = subprocess 保留其余代码相同,它将按原样工作
commands
已弃用,应替换为subprocess
调用。替代品commands.getoutput()
是subprocess.Popen().communicate()
:bandit
可能仍然会给你一个低严重性的问题,因为你仍然使用subprocess
本身不安全的东西作为调用 shell 的任何东西,但这是不可避免的。将剩余的警告视为对代码中潜在不安全性的提醒 - 根据您在 shell 中实际调用的内容,您必须自己进行检查 - 它是硬编码在字符串常量中的命令,还是用户输入,或者取决于调用代码的变量?在任何情况下,总是建议进行清理,Python 有相应的pipes
模块。根据 hoefling 的回答,“标准”方式是
subprocess
,但如果您不介意使用外部库,则可以使用一些更现代的方式。envoy已被委托人弃用,它的外观如下:
我安装了它:
保留其余代码相同,它将按原样工作