查看所有类似的问题,但无法使语法正确。我有一个python脚本,目前只运行一个命令。我需要做的是让这个命令一遍又一遍地重复......无限期......以一定的间隔。这是我的剧本:
#! /usr/bin/env python
import sys
from scapy.all import sr1,IP,ICMP,UDP,send,DNS,DNSQR
p=send(IP(dst="192.168.1.128")/UDP()/DNS(rd=1,qd=DNSQR(qname="domain.com")), count=100 )
if p:
p.show()
从命令行运行正常。但是我需要每30秒或1分钟重复一次。我如何告诉它在脚本中执行此操作?我知道我可以把它设置为一个cron工作,但我想知道如何编写脚本。谢谢!
答案 0 :(得分:2)
您可以在time
循环中使用while True
模块的sleep()
方法。
#! /usr/bin/env python
import sys
import time
from scapy.all import sr1,IP,ICMP,UDP,send,DNS,DNSQR
while True:
p=send(IP(dst="192.168.1.128")/UDP()/DNS(rd=1,qd=DNSQR(qname="domain.com")), count=100)
if p:
p.show()
time.sleep(60) # sleep for one minute
答案 1 :(得分:1)
你可以放置一个无限的while循环,并在每次迭代中添加30秒的睡眠。另一个选项可以将脚本设置为cron作业。
可取的选项是cronjob,因为由于任何异常或错误而导致python脚本退出,cron可以在下一个周期重新运行它。
答案 2 :(得分:1)
创建一个while循环。 True始终为True,因此循环保持运行。命令等待一段时间后。
#! /usr/bin/env python
import sys, time
interval = 60 #1 minute
from scapy.all import sr1,IP,ICMP,UDP,send,DNS,DNSQR
while True:
p=send(IP(dst="192.168.1.128")/UDP()/DNS(rd=1,qd=DNSQR(qname="domain.com")), count=100 )
if p:
p.show()
time.sleep(interval)
答案 3 :(得分:1)
上述答案中提到的带睡眠的无限循环是做你想要的最简单的方法。但是,如果您这样做,您的程序将成为您必须监视并确保正在运行的守护程序。这有一些您应该事先了解的成本。
我希望cron
每隔n
分钟或类似情况运行{{1}}。另一种类似于无限循环的方法是使用python sched
模块在程序中运行类似系统的迷你cron。