站长论坛 - 站长交流社区- SEO交流论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 87|回复: 2

[其他] python脚本简化jar操作命令介绍

[复制链接]
发表于 2019-5-3 15:32:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
最近在回顾和构思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)
这个递归获取路径就不多说了,可以参考前一篇文章

附:申请阿里云服务器等产品时,可以先领取1888元阿里云代金券
获取某个程序进程pid
在linux中获取某个程序pid并打印出来通常的命令是:
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)

回复

使用道具 举报

 楼主| 发表于 2019-5-10 08:53:57 | 显示全部楼层
申请阿里云服务器等产品时,可以使用2000元阿里云代金券,阿里云官网领取网址: https://promotion.aliyun.com/ntm ... l?userCode=2a7uv47d
     特别提醒您:首次购买时先将所有要买的业务都加入到购物车,最后一起付款,这样才可享受优惠。如果一个一个买,那就只有首单才能享受优惠,从第2单开始就不能享受优惠了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-28 16:26:19 | 显示全部楼层
存储库是用于在线存储消息数据本身,
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|易采站长站 ( 蒙ICP备14002389-1号 ) |

GMT+8, 2019-11-20 03:35

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表