Home  >  Q&A  >  body text

python执行cmd命令,怎么让他执行类似Ctrl+C效果将其结束命令?

python执行cmd命令,怎么让他执行Ctrl+C的效果结束命令?
我在用ping监控一个服务器的网络状态,我执行了ping命令后,他会一直这么ping下去,不停止,怎么让他在10秒后执行ctrl+c的效果

def re(cmd):
    while True:
        os.system(cmd);
re("ping 192.168.1.1 -t")

他会这样一直ping下去,想了半天也想不出怎么让他10秒后执行ctrl+c结束的执行效果,请教大神,怎么让他执行结束命令;
10秒后停止命令,类似执行ctrl+c的效果;

怪我咯怪我咯2741 days ago964

reply all(6)I'll reply

  • 巴扎黑

    巴扎黑2017-04-18 10:33:07

    Just use kill

    reply
    0
  • 迷茫

    迷茫2017-04-18 10:33:07

    os.system has very weak control, you need the .kill method of the subprocess module to send signals.

    But if it’s just ping, why don’t you just let it ping 10 times? What do you want to do?

    reply
    0
  • 天蓬老师

    天蓬老师2017-04-18 10:33:07

    [root@jenkins  xxxx]# time ping baidu.com -w 10s
    PING baidu.com (220.181.57.217) 56(84) bytes of data.
    64 bytes from 220.181.57.217 (220.181.57.217): icmp_seq=1 ttl=52 time=4.07 ms
    64 bytes from 220.181.57.217 (220.181.57.217): icmp_seq=2 ttl=52 time=26.9 ms
    64 bytes from 220.181.57.217 (220.181.57.217): icmp_seq=3 ttl=52 time=6.78 ms
    64 bytes from 220.181.57.217 (220.181.57.217): icmp_seq=4 ttl=52 time=12.9 ms
    64 bytes from 220.181.57.217 (220.181.57.217): icmp_seq=5 ttl=52 time=3.86 ms
    64 bytes from 220.181.57.217 (220.181.57.217): icmp_seq=6 ttl=52 time=3.30 ms
    64 bytes from 220.181.57.217 (220.181.57.217): icmp_seq=7 ttl=52 time=5.63 ms
    64 bytes from 220.181.57.217 (220.181.57.217): icmp_seq=8 ttl=52 time=11.2 ms
    64 bytes from 220.181.57.217 (220.181.57.217): icmp_seq=9 ttl=52 time=4.30 ms
    64 bytes from 220.181.57.217 (220.181.57.217): icmp_seq=10 ttl=52 time=4.17 ms
    
    --- baidu.com ping statistics ---
    10 packets transmitted, 10 received, 0% packet loss, time 9013ms
    rtt min/avg/max/mdev = 3.300/8.328/26.972/6.954 ms
    
    real    0m10.006s
    user    0m0.003s
    sys    0m0.006s
    

    I don’t know if I can meet your needs

    reply
    0
  • PHP中文网

    PHP中文网2017-04-18 10:33:07

    The main problem is that the executed command never returns, os.system cannot determine whether the command has been executed and executed successfully
    If you can try a simple cmd command
    os.system('start ping www.baidu.com -t')

    reply
    0
  • ringa_lee

    ringa_lee2017-04-18 10:33:07

    Registersignal.SIGINTSignal

    reply
    0
  • PHPz

    PHPz2017-04-18 10:33:07

    I tried it, and I can probably write it like this:

    import time
    
    start = end = time.time()
    def re(cmd):
        while (end - start) < 10:
            os.system(cmd);
            end = time.time()

    reply
    0
  • Cancelreply