• python脚本简化jar操作命令


    本篇和大家分享的是使用python简化对jar包操作命令,封装成简短关键字或词,达到操作简便的目的。最近在回顾和构思shell脚本工具,后面一些文章应该会分享shell内容,希望大家继续关注。

    • 获取磁盘中jar启动包
    • 获取某个程序进程pid
    • 自定义jar操作命令

    获取磁盘中jar启动包

    这一步骤主要扫描指定磁盘中待启动的jar包,然后获取其路径,方便后面操作java命令:

     1 #获取磁盘中jar启动包
     2 def find_file_bypath(strDir):
     3     filelist = os.listdir(strDir)
     4     for file in filelist:
     5         if os.path.isdir(strDir + "/" + file):
     6             find_file_bypath(strDir + "/" + file)
     7         else:
     8             if(file.find(".jar") >= 0):
     9                 fileInfo = MoFileInfo(file,strDir + "/" + file)
    10                 all_list.append(fileInfo)

    这个递归获取路径就不多说了,可以参考前一篇文章

    获取某个程序进程pid

    在linux中获取某个程序pid并打印出来通常的命令是:

    1 ps -ef | grep 程序名字

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

    1 #获取pid
    2 def get_pid(name):
    3     child = subprocess.Popen(['pgrep', '-f', name], stdout=subprocess.PIPE, shell=False)
    4     response = child.communicate()[0]
    5     print(response)
    6     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包全路径,相关代码:

     1 #执行命令
     2 def exec_file(index):
     3     try:
     4         if(index <= -1):
     5             pass
     6         else:
     7          fileInfo = all_list[int(index)]
     8          print("你选择的是:{}".format(fileInfo.path))
     9          strcmd = raw_input("请输入执行命令(nr:nohup启动java r:java启动 k:kill d:删除java包   kd:kill+删除jar包):
    ")
    10          if(strcmd == "nr"):
    11             os.system("nohup java -jar {} 2>&1 & ".format(fileInfo.path))
    12          elif(strcmd == "r"):
    13             os.system("java -jar {}".format(fileInfo.path))
    14          elif(strcmd == "k"):
    15             pid = get_pid(fileInfo.name)
    16             print("pid:" + pid)
    17             strcmd_1 = "kill -9 {}".format(pid)
    18             exec_cmd(strcmd_1)
    19          elif(strcmd == "d"):
    20             strcmd_1 = "rm -rf {}".format(fileInfo.path)
    21             exec_cmd(strcmd_1)
    22          elif(strcmd == "kd"):
    23             pid = get_pid(fileInfo.name)
    24             strcmd_1 = "kill -9 {}".format(pid)
    25             exec_cmd(strcmd_1)
    26 
    27             strcmd_1 = "rm -rf {}".format(fileInfo.path)
    28             exec_cmd(strcmd_1)
    29          else:
    30             print("无任何操作")
    31     except:
    32         print("操作失败")

    这里python操作linux命令用到的方式是os.system(command),这样已定保证了linux命令执行成功后才继续下一步的操作;下面是本次分享内容的全部代码:

     1 #!/usr/bin/python
     2 #coding=utf-8
     3 import os
     4 import subprocess
     5 from subprocess import check_output
     6 
     7 all_list = []
     8 
     9 class MoFileInfo:
    10     def __init__(self,name,path):
    11         self.name = name
    12         self.path = path
    13 
    14 #获取磁盘中jar启动包
    15 def find_file_bypath(strDir):
    16     filelist = os.listdir(strDir)
    17     for file in filelist:
    18         if os.path.isdir(strDir + "/" + file):
    19             find_file_bypath(strDir + "/" + file)
    20         else:
    21             if(file.find(".jar") >= 0):
    22                 fileInfo = MoFileInfo(file,strDir + "/" + file)
    23                 all_list.append(fileInfo)
    24 
    25 def show_list_file():
    26     for index,x in enumerate(all_list):
    27         print("{}. {}".format(index,x.name))
    28 
    29 #获取pid
    30 def get_pid(name):
    31     child = subprocess.Popen(['pgrep', '-f', name], stdout=subprocess.PIPE, shell=False)
    32     response = child.communicate()[0]
    33     print(response)
    34     return response
    35 
    36 #执行命令
    37 def exec_file(index):
    38     try:
    39         if(index <= -1):
    40             pass
    41         else:
    42          fileInfo = all_list[int(index)]
    43          print("你选择的是:{}".format(fileInfo.path))
    44          strcmd = raw_input("请输入执行命令(nr:nohup启动java r:java启动 k:kill d:删除java包   kd:kill+删除jar包):
    ")
    45          if(strcmd == "nr"):
    46             os.system("nohup java -jar {} 2>&1 & ".format(fileInfo.path))
    47          elif(strcmd == "r"):
    48             os.system("java -jar {}".format(fileInfo.path))
    49          elif(strcmd == "k"):
    50             pid = get_pid(fileInfo.name)
    51             print("pid:" + pid)
    52             strcmd_1 = "kill -9 {}".format(pid)
    53             exec_cmd(strcmd_1)
    54          elif(strcmd == "d"):
    55             strcmd_1 = "rm -rf {}".format(fileInfo.path)
    56             exec_cmd(strcmd_1)
    57          elif(strcmd == "kd"):
    58             pid = get_pid(fileInfo.name)
    59             strcmd_1 = "kill -9 {}".format(pid)
    60             exec_cmd(strcmd_1)
    61 
    62             strcmd_1 = "rm -rf {}".format(fileInfo.path)
    63             exec_cmd(strcmd_1)
    64          else:
    65             print("无任何操作")
    66     except:
    67         print("操作失败")
    68 
    69 def exec_cmd(strcmd):
    70     str = raw_input("是否执行命令(y/n):" + strcmd + "
    ")
    71     if(str == "y"):
    72         os.system(strcmd)
    73 
    74 strDir = raw_input("请输入jar所在磁盘路径(默认:/root/job):
    ")
    75 strDir = strDir if (len(strDir) > 0) else "/root/job"
    76 #获取运行包
    77 find_file_bypath(strDir)
    78 #展示运行包
    79 show_list_file()
    80 #选择运行包
    81 strIndex = raw_input("请选择要运行的编号:
    ")
    82 #执行命令
    83 exec_file(strIndex)
  • 相关阅读:
    处理缺失值
    数据清理
    数据聚合
    ajax动态生成table
    MangeEmpHashMap
    Arraylist的雇员管理操作
    jsp获取一个对象和list对象
    Controller比较两个对象discs、outlets中的元素是否相等。相同则相应的checkbox为checked
    限制input text输入的类型(数字,字母,小数点)
    联合主键的映射运用
  • 原文地址:https://www.cnblogs.com/wangrudong003/p/10423548.html
Copyright © 2020-2023  润新知