我正在尝试从“Openvas”的“*.nasl”中grep一个包含某个端口号的文件列表。在
我可以直接在终端使用命令:
egrep --only-match '111' /home/gwvm/Openvas/var/lib/openvas/plugins/*.nasl |cut -d ":" -f1
此命令返回包含111的nasl文件的所有名称。 比如:
^{pr2}$切完之后:
/home/gwvm/Openvas/var/lib/openvas/plugins/SolarWinds_TFTP.nasl
/home/gwvm/Openvas/var/lib/openvas/plugins/trojan_horses.nasl
但是当我使用python(3.1.3)时,输出会给我一个错误:
egrep:/home/gwvm/Openvas/var/lib/openvas/plugins/*.nasl: No such file or directory
因为“*.nasl”我正在考虑一个问题,但是当我尝试使用现有文件时,结果是相同的。在
代码如下:
command = ("egrep --only-match '"+ str(port[0]) +"' "+ openvas_directory["locate"]["nasl"] + '*.nasl' + ' |cut -d ":" -f1 ')
process=sp.Popen(command,shell=True, stdout= sp.PIPE)
或者
exec(command)
我也在想一个糟糕的建筑,但是我要打印命令,它给了我想要的:
egrep --only-match '111' /home/gwvm/Openvas/var/lib/openvas/plugins/*.nasl |cut -d ":" -f1
如果有什么想法的话!在
或者使用
check_output()
顺便说一句,你|
在Popen;)指南:
使用
Popen
时,如果以字符串形式提供命令,请使用shell=True
。 但是,如果您向Popen
提供一个列表['ls, '-l']
,那么使用shell=False
,这就是它的工作原理。在如果是管道数据,执行两个不同的
Popen
,并将第一个命令的输出用作第二个命令的stdin,这相当于在Linux中执行|
。在相关问题 更多 >
编程相关推荐