我使用Python脚本每2分钟检测一次本地网络中的连接设备 - 将输出保存在文件中(我只保存最后一个ip号码)。
这是我的代码:
import os
os.system('for ip in $(seq 1 10); do ping -c 1 192.168.1.$ip>/dev/null; '
'[ $? -eq 0 ] && echo "$ip" || : ; '
'done > /home/pi/Desktop/Network/logs/logLocal.txt')
输出结果例如:
1
2
4
7
我现在的问题是,是否可以通过单词替换数字7? 如果发现设备7,则程序写入"七"文件中没有7个。
感谢您的帮助!
答案 0 :(得分:2)
以下脚本将完成这项工作:
# Note that you can use `{a..b}` instead of `seq`
for ip in {1..10} ; do
# No need to execute the command and then check it's
# return value. You can do it in one line
if ping -c 1 192.168.1.$ip > /dev/null ; then
# check for `7`
if [ "$ip" = "7" ] ; then
echo "seven"
else if [ "$ip" = 5 ] ; then
echo "five"
# ... and so on
else
echo "$ip"
fi
fi
done > output.txt
答案 1 :(得分:1)
check_call
将引发CalledProcessError
,因此我们可以捕获该异常并且什么也不做,如果ping成功,我们使用{的最后一位来写dict中的值{1}}作为关键。
ip
答案 2 :(得分:1)
我会这样做:
num name
脚本:
devices="./dev"
while read -r num name
do
ping -c 1 -t1 192.168.1.$num >/dev/null 2>&1 && echo "$name up"
done < "$devices"
btw,稍加修改,您可以直接使用/etc/hosts
;)
同样使用nmap
或fping
或arp
可能会更快,因为按顺序ping每个IP ...
答案 3 :(得分:0)
这看起来像os.system()
中的Unix命令。因此,您只需将结果通过replace
传递给文件:
import os
os.system('for ip in $(seq 1 10); do ping -c 1 192.168.1.$ip>/dev/null; '
'[ $? -eq 0 ] && echo "$ip" || : ; '
'done | replace 7 seven > /home/pi/Desktop/Network/logs/logLocal.txt')
有关replace
的更多信息,请参阅here。