【发布时间】:2012-05-25 01:18:27
【问题描述】:
我正在编写一个 Python 程序,该程序需要返回在我的一个漏洞扫描中扫描的活动主机。我在返回 XML 之前使用过这种方法,但是当我尝试处理这些额外的程序(例如 cut 和 grep)时,我遇到了问题。也许它不喜欢“管道” |或者也许我在这里用逗号做了一些完全错误的事情,但我已经尝试了各种各样的事情,但似乎无法让它像我从命令行独立运行命令时那样返回结果。非常感谢您提供的任何帮助。
def activeHostsQuery():
args = ['curl', '-s', '-k', '-H', 'X-Requested-With: curl demoapp', '-u','username:password', 'https://qualysapi.qualys.com/api/2.0/fo/scan/?action=fetch&scan_ref=scan/1111111.22222&mode=brief&output_format=csv', '|', 'cut', '-d', '-f1', '|', 'sort', '|', 'uniq', '|', 'grep', '-E', '"\"[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\""', '|', 'wc', '-l']
activeHostsNumber = subprocess.Popen(args, stdout=subprocess.PIPE).communicate()[0]
return activeHostsNumber
【问题讨论】:
-
您是否尝试将“shell=True”参数添加到
subprocess.Popen? -
activeHostsNumber = subprocess.Popen(args, stdout=subprocess.PIPE, shell=TRUE).communicate()[0] .....这给了我一个“全局名称“TRUE”未定义错误
-
它必须是“真”,而不是“真”——大小写很重要。
-
curl:尝试“curl --help”或“curl --manual”以获取更多信息。这是我进行这些更改时收到的消息
-
做到这一点的正确方法是根本不使用任何shell命令。 Python 可以为您完成 curl、cut、sort、grep 和 wc 所做的所有事情。
标签: python linux python-3.x subprocess