本篇和大家分享的是使用 python 简化对 jar 包操作命令, 封装成简短关键字或词, 达到操作简便的目的. 最近在回顾和构思 shell 脚本工具, 后面一些文章应该会分享 shell 内容, 希望大家继续关注.
获取磁盘中 jar 启动包
获取某个程序进程 pid
自定义 jar 操作命令
获取磁盘中 jar 启动包
这一步骤主要扫描指定磁盘中待启动的 jar 包, 然后获取其路径, 方便后面操作 java 命令:
- # 获取磁盘中 jar 启动包
- def find_file_bypath(strDir):
- filelist = os.listdir(strDir)
- for file in filelist:
- if os.path.isdir(strDir + "/" + file):
- find_file_bypath(strDir + "/" + file)
- else:
- if(file.find(".jar")>= 0):
- fileInfo = MoFileInfo(file,strDir + "/" + file)
- all_list.append(fileInfo)
这个递归获取路径就不多说了, 可以参考前一篇文章
获取某个程序进程 pid
在 Linux 中获取某个程序 pid 并打印出来通常的命令是:
ps -ef | grep 程序名字
在 py 工具中同样用到了 grep 命令, 通过执行 Linux 命令获取相对应的 pid 值:
- # 获取 pid
- def get_pid(name):
- child = subprocess.Popen(['pgrep', '-f', name], stdout=subprocess.PIPE, shell=False)
- response = child.communicate()[0]
- print(response)
- return response
这里直接取的第一个值, 因为上面第一节已经能够定位到程序 jar 包的名字, 所以获取 pid 很容易
自定义 jar 操作命令
自定义其实就是用我们随便定义的单词或关键字来代替 jar 包操作命令, 这里我封装了有 5 种, 分别如下:
- nr:nohup java -jar {
- } 2>&1 &
- r:java -jar {
- }
- k:kill -9 {
- }
- d:rm -rf {
- }
- kd:kill -9 {
- }
{} 代表的是 pid 和 jar 包全路径, 相关代码:
- # 执行命令
- def exec_file(index):
- try:
- if(index <= -1):
- pass
- else:
- fileInfo = all_list[int(index)]
- print("你选择的是:{}".format(fileInfo.path))
- strcmd = raw_input("请输入执行命令 (nr:nohup 启动 java r:java 启动 k:kill d: 删除 java 包 kd:kill + 删除 jar 包):\r\n")
- if(strcmd == "nr"):
- os.system("nohup java -jar {} 2>&1 &".format(fileInfo.path))
- elif(strcmd == "r"):
- os.system("java -jar {}".format(fileInfo.path))
- elif(strcmd == "k"):
- pid = get_pid(fileInfo.name)
- print("pid:" + pid)
- strcmd_1 = "kill -9 {}".format(pid)
- exec_cmd(strcmd_1)
- elif(strcmd == "d"):
- strcmd_1 = "rm -rf {}".format(fileInfo.path)
- exec_cmd(strcmd_1)
- elif(strcmd == "kd"):
- pid = get_pid(fileInfo.name)
- strcmd_1 = "kill -9 {}".format(pid)
- exec_cmd(strcmd_1)
- strcmd_1 = "rm -rf {}".format(fileInfo.path)
- exec_cmd(strcmd_1)
- else:
- print("无任何操作")
- except:
- print("操作失败")
这里 python 操作 Linux 命令用到的方式是 os.system(command), 这样已定保证了 Linux 命令执行成功后才继续下一步的操作; 下面是本次分享内容的全部代码:
- #!/usr/bin/python
- #coding=utf-8
- import os
- import subprocess
- from subprocess import check_output
- all_list = []
- class MoFileInfo:
- def __init__(self,name,path):
- self.name = name
- self.path = path
- # 获取磁盘中 jar 启动包
- def find_file_bypath(strDir):
- filelist = os.listdir(strDir)
- for file in filelist:
- if os.path.isdir(strDir + "/" + file):
- find_file_bypath(strDir + "/" + file)
- else:
- if(file.find(".jar")>= 0):
- fileInfo = MoFileInfo(file,strDir + "/" + file)
- all_list.append(fileInfo)
- def show_list_file():
- for index,x in enumerate(all_list):
- print("{}. {}".format(index,x.name))
- # 获取 pid
- def get_pid(name):
- child = subprocess.Popen(['pgrep', '-f', name], stdout=subprocess.PIPE, shell=False)
- response = child.communicate()[0]
- print(response)
- return response
- # 执行命令
- def exec_file(index):
- try:
- if(index <= -1):
- pass
- else:
- fileInfo = all_list[int(index)]
- print("你选择的是:{}".format(fileInfo.path))
- strcmd = raw_input("请输入执行命令 (nr:nohup 启动 java r:java 启动 k:kill d: 删除 java 包 kd:kill + 删除 jar 包):\r\n")
- if(strcmd == "nr"):
- os.system("nohup java -jar {} 2>&1 &".format(fileInfo.path))
- elif(strcmd == "r"):
- os.system("java -jar {}".format(fileInfo.path))
- elif(strcmd == "k"):
- pid = get_pid(fileInfo.name)
- print("pid:" + pid)
- strcmd_1 = "kill -9 {}".format(pid)
- exec_cmd(strcmd_1)
- elif(strcmd == "d"):
- strcmd_1 = "rm -rf {}".format(fileInfo.path)
- exec_cmd(strcmd_1)
- elif(strcmd == "kd"):
- pid = get_pid(fileInfo.name)
- strcmd_1 = "kill -9 {}".format(pid)
- exec_cmd(strcmd_1)
- strcmd_1 = "rm -rf {}".format(fileInfo.path)
- exec_cmd(strcmd_1)
- else:
- print("无任何操作")
- except:
- print("操作失败")
- def exec_cmd(strcmd):
- str = raw_input("是否执行命令 (y/n):" + strcmd + "\r\n")
- if(str == "y"):
- os.system(strcmd)
- strDir = raw_input("请输入 jar 所在磁盘路径 (默认:/root/job):\r\n")
- strDir = strDir if (len(strDir)> 0) else "/root/job"
- # 获取运行包
- find_file_bypath(strDir)
- # 展示运行包
- show_list_file()
- # 选择运行包
- strIndex = raw_input("请选择要运行的编号:\r\n")
- # 执行命令
- exec_file(strIndex)
来源: https://yq.aliyun.com/articles/691197