python - 命中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
我可以尝试什么来解决这个问题?
解决方案
只需使用 Python 的错误处理。使用和语句捕获任何KeyboardInnterrupt
s (在您的子进程函数中) ,如下所示:try
except
def stuff(things):
try:
# do stuff
except KeyboardInterrupt:
return last_value
推荐阅读
- visual-studio-2017 - VS 2017 15.7.2 Manage Nuget Package报错“Visual Studio组件缓存已过期请重启Visual Studio”
- getorgchart - JSON 使用 getorgchart 创建树
- angular - ng2-ckeditor 工具栏无法正常工作
- symfony - 在请求期间检索实体而不是持久化它
- database - 保存在数据库中时所有时区的 Laravel 时间延迟
- rxjs - 切换到新的 observable,将上一个 observable 中的最新作为输入
- javascript - MediaElement.buffered IndexSizeError
- c# - 运行 CMD.exe 或 netsh.exe 的区别
- ssis - 如何使用 SQL Server 身份验证使用目录进行 SSIS 包部署?
- javascript - 在浏览器中显示 .raw 文件图像