如何使命令在python脚本中以一定的间隔重复自身

2024-06-28 19:13:54 发布

您现在位置: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作业,但我想知道如何编写脚本。谢谢!在


Tags: import命令ipenv脚本sendbindns
3条回答

您可以在while True循环中使用time模块的^{}方法。

#! /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 

您可以设置一个无限的while循环,并在每次迭代中添加30秒的睡眠时间。另一个选项可以将脚本设置为cron作业。

建议的选择是cronjob,因为万一python脚本由于任何异常或错误而退出,cron可以在下一个循环中重新运行它。

创建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)

相关问题 更多 >