<small id='hGeCM'></small><noframes id='hGeCM'>

  • <tfoot id='hGeCM'></tfoot>

      • <bdo id='hGeCM'></bdo><ul id='hGeCM'></ul>
      <i id='hGeCM'><tr id='hGeCM'><dt id='hGeCM'><q id='hGeCM'><span id='hGeCM'><b id='hGeCM'><form id='hGeCM'><ins id='hGeCM'></ins><ul id='hGeCM'></ul><sub id='hGeCM'></sub></form><legend id='hGeCM'></legend><bdo id='hGeCM'><pre id='hGeCM'><center id='hGeCM'></center></pre></bdo></b><th id='hGeCM'></th></span></q></dt></tr></i><div id='hGeCM'><tfoot id='hGeCM'></tfoot><dl id='hGeCM'><fieldset id='hGeCM'></fieldset></dl></div>

        <legend id='hGeCM'><style id='hGeCM'><dir id='hGeCM'><q id='hGeCM'></q></dir></style></legend>

        ping 无限时间并在 Python 中获取其输出

        时间:2023-07-21
      1. <i id='hPcvM'><tr id='hPcvM'><dt id='hPcvM'><q id='hPcvM'><span id='hPcvM'><b id='hPcvM'><form id='hPcvM'><ins id='hPcvM'></ins><ul id='hPcvM'></ul><sub id='hPcvM'></sub></form><legend id='hPcvM'></legend><bdo id='hPcvM'><pre id='hPcvM'><center id='hPcvM'></center></pre></bdo></b><th id='hPcvM'></th></span></q></dt></tr></i><div id='hPcvM'><tfoot id='hPcvM'></tfoot><dl id='hPcvM'><fieldset id='hPcvM'></fieldset></dl></div>

        <tfoot id='hPcvM'></tfoot>
          <bdo id='hPcvM'></bdo><ul id='hPcvM'></ul>
              <tbody id='hPcvM'></tbody>

            <small id='hPcvM'></small><noframes id='hPcvM'>

            <legend id='hPcvM'><style id='hPcvM'><dir id='hPcvM'><q id='hPcvM'></q></dir></style></legend>

                  本文介绍了ping 无限时间并在 Python 中获取其输出的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  任务是:尝试使用ping 8.8.8.8"等最基本的形式在python中发送ping.一段时间后终止 ping 命令(在终端中,将执行 Ctrl+C)并获取其输出.显示 ping 统计信息的最后几行输出特别令人感兴趣.

                  The task is: Try to send ping in python using the most basic form like "ping 8.8.8.8". After some time terminate the ping command (In a terminal, one will do Ctrl+C) and get its output. The last several lines of output which shows the ping statistics are of particular interest.

                  两种方法都试过了,都不行.我的操作系统版本是 Mac OS X 10.10.1.

                  Two methods tried, did not work. My OS version is Mac OS X 10.10.1.

                  第一种方法使用模块 pexpect,ping 将在大约 17 秒后停止,尽管我没有要求它停止:

                  First method uses module pexpect, and ping will stop after about 17 seconds though I did not ask it to stop:

                  import pexpect
                  import time
                  child = pexpect.spawn('ping 8.8.8.8')
                  (x, y) = child.getwinsize()
                  print x
                  print y
                  time.sleep(21)
                  child.terminate()
                  x = child.read()
                  print x
                  

                  第二种方法使用模块子进程,ping输出的最后几行丢失了:

                  Second Method uses module subprocess, and the last several lines of ping output are lost:

                  import time
                  from subprocess import PIPE, Popen
                  child = Popen(['ping', '8.8.8.8'], stdin = PIPE, stdout = PIPE, stderr = PIPE)
                  time.sleep(5)
                  child.terminate()
                  x = child.stdout.read()
                  print x
                  x = child.stderr.read()
                  print x
                  

                  如果有任何帮助,我将不胜感激!不接受ping -c XXX".

                  I'd appreciate any help! "ping -c XXX" is not accepted.

                  推荐答案

                  您的第二个解决方案很棒.获得您想要的行为(获得 ping 的结论")只有一个问题:您向进程发送了错误的信号.

                  The second solution you have is great. There's just one issue with obtaining your desired behavior (getting the ping's "conclusion"): You're sending the wrong signal to the process.

                  当您从 shell 终止进程时,通常会发送 SIGINT 信号.请参阅 "bash - Ctrl-C 如何终止子进程?".这允许进程结束"(例如,清理临时文件、提供调试信息).

                  When you terminate the process from a shell, you traditionally send a SIGINT signal. See "bash - How does Ctrl-C terminate a child process?". This allows the process to "wrap up" (e.g., cleaning up temprorary files, providing debug information).

                  import signal
                  
                  # Open process
                  
                  child.send_signal(signal.SIGINT)
                  
                  # Provide some time for the process to complete
                  time.sleep(1)
                  
                  # Echo output
                  

                  Popen.terminate<您现在使用的/a> 发送 SIGTERM 而不是 SIGINT.

                  这篇关于ping 无限时间并在 Python 中获取其输出的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:在子进程中使用 * 通配符的命令问题 下一篇:使用 Python 子进程模块时如何传递变量

                  相关文章

                    1. <small id='eucZH'></small><noframes id='eucZH'>

                    2. <tfoot id='eucZH'></tfoot><legend id='eucZH'><style id='eucZH'><dir id='eucZH'><q id='eucZH'></q></dir></style></legend>
                      • <bdo id='eucZH'></bdo><ul id='eucZH'></ul>
                      <i id='eucZH'><tr id='eucZH'><dt id='eucZH'><q id='eucZH'><span id='eucZH'><b id='eucZH'><form id='eucZH'><ins id='eucZH'></ins><ul id='eucZH'></ul><sub id='eucZH'></sub></form><legend id='eucZH'></legend><bdo id='eucZH'><pre id='eucZH'><center id='eucZH'></center></pre></bdo></b><th id='eucZH'></th></span></q></dt></tr></i><div id='eucZH'><tfoot id='eucZH'></tfoot><dl id='eucZH'><fieldset id='eucZH'></fieldset></dl></div>