gpt4 book ai didi

Python 执行 grep

转载 作者:行者123 更新时间:2023-11-28 17:47:12 25 4
gpt4 key购买 nike

我正在尝试从“Openvas”的“*.nasl”中获取包含特定端口号的文件列表。

我可以直接在终端中使用命令:

egrep --only-match '111' /home/gwvm/Openvas/var/lib/openvas/plugins/*.nasl |cut -d ":" -f1 

此命令返回包含 111 的 nasl 文件的所有名称。喜欢:

/home/gwvm/Openvas/var/lib/openvas/plugins/SolarWinds_TFTP.nasl:111 
/home/gwvm/Openvas/var/lib/openvas/plugins/trojan_horses.nasl:111

剪切后:

/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: 没有那个文件或目录

我正在考虑一个因为“*.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

如果有什么想法!

最佳答案

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 并使用第一个命令的输出作为第二个命令的标准输入,这等同于执行 | 在 Linux 中。

关于Python 执行 grep,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16398565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com