首页 > 解决方案 > 命中KeyboardInterrupt子进程时如何将最后一个输出保存在变量中

问题描述

我对子流程模块完全陌生。我试图自动化解除身份验证攻击命令。当我airodump-ng wlan0mon如您所知运行时,它会查找附近的 AP 以及连接到它的客户端。

现在,当我尝试使用让我们p = subprocess.run(["airmon-ng","wlan0mon"], capture_output=True)在 Python 中假设运行此命令时,您知道此命令会一直运行,直到用户按下 Ctrl+C,因此当用户在变量中按下 Ctrl+C 时,它应该保存最后的输出,但我得到的错误是这个:

Traceback (most recent call last):
  File "Deauth.py", line 9, in <module>
    p3 = subprocess.run(["airodump-ng","wlan0"], capture_output=True)
  File "/usr/lib/python3.8/subprocess.py", line 491, in run
    stdout, stderr = process.communicate(input, timeout=timeout)
  File "/usr/lib/python3.8/subprocess.py", line 1024, in communicate
    stdout, stderr = self._communicate(input, endtime, timeout)
  File "/usr/lib/python3.8/subprocess.py", line 1866, in _communicate
    ready = selector.select(timeout)
  File "/usr/lib/python3.8/selectors.py", line 415, in select
    fd_event_list = self._selector.poll(timeout)
KeyboardInterrupt

我可以尝试什么来解决这个问题?

标签: pythonlinuxsubprocesskali-linux

解决方案


只需使用 Python 的错误处理。使用和语句捕获任何KeyboardInnterrupts (在您的子进程函数中) ,如下所示:tryexcept

def stuff(things):
  try:
    # do stuff
  except KeyboardInterrupt:
    return last_value

推荐阅读