香港云主机最佳企业级服务商!

ADSL拨号VPS包含了中国大陆(联通,移动,电信,)

中国香港,国外拨号VPS。

当前位置:云主机 > python >

电信ADSL拨号VPS
联通ADSL拨号VPS
移动ADSL拨号VPS

利用python脚本如何简化jar操作命令


时间:2022-04-02 10:19 作者:admin610456


前言

本篇和大家分享的是使用python/' target='_blank'>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并打印出来通常的命令是:

1 ps -ef | grep 程序名字

在py工具中同样用到了grep命令,通过执行linux命令获取相对应的pid值:

#获取piddef 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-8import osimport subprocessfrom subprocess import check_outputall_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))#获取piddef 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)

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

(责任编辑:admin)






帮助中心
会员注册
找回密码
新闻中心
快捷通道
域名登录面板
虚机登录面板
云主机登录面板
关于我们
关于我们
联系我们
联系方式

售前咨询:17830004266(重庆移动)

企业QQ:383546523

《中华人民共和国工业和信息化部》 编号:ICP备00012341号

Copyright © 2002 -2018 香港云主机 版权所有
声明:香港云主机品牌标志、品牌吉祥物均已注册商标,版权所有,窃用必究

云官方微信

在线客服

  • 企业QQ: 点击这里给我发消息
  • 技术支持:383546523

  • 公司总台电话:17830004266(重庆移动)
  • 售前咨询热线:17830004266(重庆移动)