如何从 python 调用 nikto 并将输出作为字符串返回
Posted
技术标签:
【中文标题】如何从 python 调用 nikto 并将输出作为字符串返回【英文标题】:How to call nikto from python and return output as a string 【发布时间】:2016-02-28 13:33:29 【问题描述】:这个函数应该调用 nikto 并返回它作为字符串输出,但它只是永远挂起。我很想弄清楚为什么这不起作用,我已经尝试了我能想到的一切。
def nikto(host, *args):
arguments = ' '.join(args)
command = 'nikto -host '.format(host, arguments)
return commands.getoutput(command)
什么是 nikto?
Nikto 是一款开源 (GPL) 网络服务器扫描程序,它针对网络服务器执行多项综合测试,包括 6400 多个潜在危险文件/CGI、检查 1200 多个服务器的过时版本以及 270 多个版本的特定问题服务器。
Nikto 是用什么语言编写的?
Perl
注意:
我也试过os.popen('nikto').read()
我的系统
Linux rwilson-Aspire-E5-521 3.16.0-55-generic #74~14.04.1-Ubuntu SMP Tue Nov 17 10:15:59 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
【问题讨论】:
os.popen()
是要走的路。使用 'stdout=PIPE' 或使用 communicate()
来取回您的数据...
我会试一试的。
【参考方案1】:
如果您想调用命令并简单地获取其输出,请使用subprocess.check_output
。
def nikto(host, *args):
return subprocess.check_output(['nikto', '-host', host] + args)
但是请注意,如果您的命令的返回码不为零,此方法将引发异常,但该异常将在其output
属性中包含输出。
如果您想同时捕获命令的标准错误和标准输出,请添加参数stderr=subprocess.STDOUT
。
【讨论】:
以上是关于如何从 python 调用 nikto 并将输出作为字符串返回的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Python 日志记录模块获得非阻塞/实时行为? (输出到 PyQt QTextBrowser)