<分区>
我正在创建一个 python 3 工具,它需要访问许多其他预先存在的网络工具,有些没有 python 库。
我已经尝试过 subprocess.check_output
,它可以工作,但是,这个数据不容易处理,我不相信它支持像 grep
或 awk
如果两个命令都需要参数。
我希望能够在单独的线程上运行每个命令并存储输出,以及停止命令的输出,因为我将使用像 SSLStrip
、ArpSpoof 这样的工具
、nmap
等。运行直到终止。
执行此操作的最佳方法是什么?
<分区>
我正在创建一个 python 3 工具,它需要访问许多其他预先存在的网络工具,有些没有 python 库。
我已经尝试过 subprocess.check_output
,它可以工作,但是,这个数据不容易处理,我不相信它支持像 grep
或 awk
如果两个命令都需要参数。
我希望能够在单独的线程上运行每个命令并存储输出,以及停止命令的输出,因为我将使用像 SSLStrip
、ArpSpoof 这样的工具
、nmap
等。运行直到终止。
执行此操作的最佳方法是什么?
最佳答案
我建议使用 subprocess
来构建适当的管道,就像您在 shell 语法中习惯的那样。它只是变得有点“语法化”。下面是一个如何调用 ls | 的例子。 Python 中的 tr e
:
from subprocess import Popen, PIPE
ls = Popen([ 'ls' ], stdout=PIPE)
tr = Popen([ 'tr', 'e', 'E' ], stdin=ls.stdout, stdout=PIPE)
out, err = tr.communicate()
在此之后,out
将包含 ls
的输出,所有 e
都已转换为 E
。
当然,更复杂的事情可以用这个方法来完成。
关于python - 从 python 运行 shell 命令的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48446461/
相关文章:
bash - 使用 case 命令处理解析命令行参数的极端情况的正确方法
linux - 获取 VirtualBox windows guest 以使用 Linux 主机的/etc/hosts 来解析 URL
linux - 无法修改cloudera Hadoop 4.7发行版中的配置文件
Python3 和 asyncio : how to implement websocket server as asyncio instance?
python - OpenCV-contrib/Python/Windows:Tracker.write()在matrix_wrap.cpp中引发错误,Tracker.read()使Python崩溃