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

时间:2018-01-25 15:30:06

标签: python linux bash shell

我正在创建一个python 3工具,需要访问许多其他预先存在的网络工具,而有些人没有python库。 我已经尝试了subprocess.check_output,但是,这些数据并不容易使用,我也不相信它支持grepawk等管道命令如果两个命令都需要参数。 我希望能够在单独的线程上运行每个命令并存储输出,并停止输出命令,因为我将使用SSLStripArpSpoof等工具,nmap和其他人。直到终止为止。

最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

我建议使用subprocess来构建适当的管道,就像在shell语法中一样。它只是得到了一点"语法和#34;。以下是如何在Python中调用ls | tr e 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

当然,使用这种方法可以完成更复杂的事情。