问题描述
我正在尝试将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楼
到目前为止有效?
:-)我不这么认为。
当我尝试在python3中执行时,它只是挂在subprocess
语句上。
line
在哪里定义?
您从不增加number
或count
。
您必须找出如何在while
循环中访问subprocess
的输出。
我认为您进展顺利。
我会做这样的事情:
-
阅读有关
subprocess
。 -
在该循环中打印
line
以查看您的工作方式。 -
循环后打印
count
。 -
您将需要另一个
subprocess
来运行ps
。 -
用直接的Python代码替换
echo
,awk
,cut
和grep
提供的所有功能。 -
阅读
awk
,cut
和grep
的手册页,以了解这些命令在shell脚本中的作用。 - 要了解如何在Python中执行这些操作,请先查看Python字符串方法文档。 您几乎需要做的所有事情都在字符串方法和子过程中。
祝好运!