如何使命令在一定时间间隔内在python脚本中重复

时间:2015-12-23 15:27:27

标签: python

查看所有类似的问题,但无法使语法正确。我有一个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工作,但我想知道如何编写脚本。谢谢!

4 个答案:

答案 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。