将bash脚本转换为python

时间:2018-09-24 01:49:24

标签: linux shell python

我正在尝试将bash脚本转换为python。这是bash代码:

number=1
/sbin/lsof -i -P -s tcp:LISTEN | while read -r line; do

 if [ "$number" -eq 1 ] ; then
         number=$((number+1))
         continue
 fi

 a_pid=`/bin/echo "$line" | /bin/awk '{print $2}'`

 ps_line=`/bin/ps h -fp "$lsof_pid"`
 ps_cmd="${ps_line#*/}"
 a_u=`/bin/echo "$line" | /bin/awk '{print $3}'`
 a_t=`/bin/echo "$line" | /bin/awk '{print $5}'`
 a_p=`/bin/echo "$line" | /bin/awk '{print $9}' | /bin/cut -d":" -f 2`

 service_line=$(/bin/grep " ${lsof_port}/tcp" /etc/services)
 port_name=`/bin/echo "$service_line" | /bin/awk '{print $1}'`

 done

这是我到目前为止对Python的了解:

import subprocess
number=1
subprocess.call(['/sbin/lsof', '-i', '-P', '-s', 'tcp:LISTEN'],shell=True)

while line.readline():
        if(number==1):
                count=(number+1)

到目前为止有效。但是,我不确定如何在不调用函数的情况下将a_p文件转换为python(我本质上需要将数据过滤为具有特定列的可读格式)。我什至不确定我是否正确地执行了while函数,但是它并没有给我任何错误,到目前为止到目前为止还无法确定。

1 个答案:

答案 0 :(得分:0)

到目前为止有效吗? :-)我不这么认为。当我尝试在python3中执行时,它只是挂在subprocess语句上。 line在哪里定义?您永远不会增加numbercount。您必须找出如何在subprocess循环中访问while的输出。

我认为您进展顺利。

我会做这样的事情:

  • 继续阅读subprocess
  • 在该循环中打印line,以查看您的工作方式。
  • 在循环后打印count
  • 您将需要另一个subprocess来运行ps
  • 替换echoawkcut提供的所有功能, 和grep和直接的Python代码。
  • 阅读awkcutgrep的手册页,以了解这些命令在shell脚本中的作用。
  • 要了解如何在Python中执行这些操作,请先查看 Python字符串方法文档。几乎您需要的一切 将会在String Methods and Subprocess中完成。

祝你好运!