前前言
GitHub原创项目: How to ?https://github.com/ryan-zg/python-howto-autoinit 目前提交的代码较为简单,后续还会补充更新。
前言
我在进行Java
开发的过程中,每次打开电脑就需要启动很多软件,什么IDEA
, VMware
, Xshell
, Nginx
....等等。但是每次都要一个一个打开,打开之后就用一秒,然后就关了,启动电脑又要重新操作。这也太不方便了,所以我这里使用了python
实现了简单的自动初始化。
思路
首先想要打开几个软件,不难想到,使用os
, 或者subprocess
,然后中间sleep
那么几秒就可以实现,非常的容易。
import subprocess
subprocess.Popen([VM_EXE, VM_DOCKER_PATH])
实际上知道 Popen() 方法中的启动路径和项目路径两个参数就可以了,启动多个软件无非是中间加上 time.sleep(),等待软件的加载然后进行后续操作,比如打开 VMware 并启动 Linux 虚拟机后需要等待加载完成后使用 Xshell 连接。
如果出现项目很大需要较长时间加载的情况呢?虽然可以给 sleep
添加更大的值,但是似乎总不能每次换一个项目就修改源代码。
所以,我们需要 监听,或者说需要监控软件的状态,然后根据状态进行操作。
- 对于需要加载的,一个思路是监听日志,比如
idea
每次加载项目时会输入日志,根据日志打印的状态判断项目是否加载完成。日志的位置在:主菜单--帮助--在资源管理器中打开。这里的 keyword 表示的是项目加载完成后的关键字,阅读日志后可以选择 "Finished for XXXX"
def check_log_for_completion(log_file_path, keyword):
"""检查日志文件是否包含指定的关键字"""
# 检查文件是否存在
if not os.path.exists(log_file_path):
return False
with open(log_file_path, 'r', encoding='utf-8') as log_file:
# 循环检查日志文件的末尾部分是否包含项目加载完成的关键字
lines = log_file.readlines()
for line in lines:
if keyword in line:
return True
return False
- 对于需要连接的,比如
linux
虚拟机,我们可以尝试使用python
进行ssh
连接,然后根据返回值判断是否连接成功。
def check_ssh_connection(host, port=22, username='root', password='123456', timeout=5):
"""尝试通过 SSH 连接到虚拟机"""
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
ssh.connect(host, port=port, username=username, password=password, timeout=timeout)
return True
except (paramiko.ssh_exception.NoValidConnectionsError, paramiko.ssh_exception.SSHException, TimeoutError) as e:
print(f"SSH 连接失败: {e}")
return False
finally:
ssh.close()
- .......
这样我们得到了程序运行的状态,就可以不断等待需要的状态返回,然后进行下一步操作。
后续
项目中还有很多 todo 待完成,以后会将功能完善,以及优化结构等。
如果想要添加新的,需要启动的程序,目前来看不需要修改源代码,只需要添加就行,耦合度还不错。
最后的话就是想将程序打包,只需要双击就可以完成甚至不需要打开编译器....
标签:初始化,return,log,Python,ssh,file,软件,日志,加载 From: https://blog.csdn.net/qq_61901330/article/details/142004031