Python执行grep

2024-05-16 09:06:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试从“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

如果有什么想法的话!在


Tags: 文件命令onlyhomevarlibmatchplugins
1条回答
网友
1楼 · 发布于 2024-05-16 09:06:29
from subprocess import PIPE, Popen
x = Popen('egrep  only-match \'111\' /home/gwvm/Openvas/var/lib/openvas/plugins/*.nasl', stdout=PIPE, stderr=PIPE, shell=True)
y = Popen('cut -d ":" -f1', stdin=x.stdout, stdout=PIPE, stderr=PIPE, shell=True)

for row in y.stdout.readline():
    print row

或者使用check_output() 顺便说一句,你|在Popen;)

指南:

使用Popen时,如果以字符串形式提供命令,请使用shell=True。 但是,如果您向Popen提供一个列表['ls, '-l'],那么使用shell=False,这就是它的工作原理。在

如果是管道数据,执行两个不同的Popen,并将第一个命令的输出用作第二个命令的stdin,这相当于在Linux中执行|。在

相关问题 更多 >