我正在尝试将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函数,但是它并没有给我任何错误,到目前为止到目前为止还无法确定。
答案 0 :(得分:0)
到目前为止有效吗? :-)我不这么认为。当我尝试在python3中执行时,它只是挂在subprocess
语句上。 line
在哪里定义?您永远不会增加number
或count
。您必须找出如何在subprocess
循环中访问while
的输出。
我认为您进展顺利。
我会做这样的事情:
subprocess
。line
,以查看您的工作方式。count
。subprocess
来运行ps
。echo
,awk
,cut
提供的所有功能,
和grep
和直接的Python代码。awk
,cut
和grep
的手册页,以了解这些命令在shell脚本中的作用。祝你好运!