python - 从 python 运行 shell 命令的最佳方法

标签 python linux bash shell

<分区>

我正在创建一个 python 3 工具,它需要访问许多其他预先存在的网络工具,有些没有 python 库。 我已经尝试过 subprocess.check_output,它可以工作,但是,这个数据不容易处理,我不相信它支持像 grepawk 如果两个命令都需要参数。 我希望能够在单独的线程上运行每个命令并存储输出,以及停止命令的输出,因为我将使用像 SSLStripArpSpoof 这样的工具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 - 检查指定名称的画面是否存在

linux - 获取 VirtualBox windows guest 以使用 Linux 主机的/etc/hosts 来解析 URL

linux - 无法修改cloudera Hadoop 4.7发行版中的配置文件

java - JSVC 初始化脚本不退出

Python3 和 asyncio : how to implement websocket server as asyncio instance?

linux - Unix sed 命令没有替换提供的字符串

python - OpenCV-contrib/Python/Windows:Tracker.write()在matrix_wrap.cpp中引发错误,Tracker.read()使Python崩溃

python - 列表理解,如果不在第二个列表中则值

Python:为什么 print 语句和 subprocess.call() 输出不同步?