本篇和大家分享的是使用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") >= ):
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()[]
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 <= -):
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-
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") >= ):
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()[]
print(response)
return response #执行命令
def exec_file(index):
try:
if(index <= -):
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) > ) else "/root/job"
#获取运行包
find_file_bypath(strDir)
#展示运行包
show_list_file()
#选择运行包
strIndex = raw_input("请选择要运行的编号:\r\n")
#执行命令
exec_file(strIndex)

python脚本简化jar操作命令的更多相关文章

  1. Java程序中调用Python脚本的方法

    在程序开发中,有时候需要Java程序中调用相关Python脚本,以下内容记录了先关步骤和可能出现问题的解决办法. 1.在Eclipse中新建Maven工程: 2.pom.xml文件中添加如下依赖包之后 ...

  2. 使用Python脚本强化LLDB调试器

    LLDB是Xcode自带的调试器,作为一个iOS应用开发程序员,平时我在开发应用时会使用LLDB来调试代码.在逆向应用时,也会用到LLDB来跟踪应用的执行过程. LLDB还内置了一个Python解析器 ...

  3. 【Python脚本】Python创建删除文件-----------我的第一个Python脚本

    Python相对C++和Java来说,是解释性语言,非常适合来编写脚本. 很久之前就开始学习Python的语法了,今天写了第一个Python的脚本,来简化我的一些日常工作. 我平时学习的时候喜欢新建一 ...

  4. Delphi中使用python脚本读取Excel数据

    Delphi中使用python脚本读取Excel数据2007-10-18 17:28:22标签:Delphi Excel python原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 . ...

  5. linux 下后台运行python脚本

    这两天要在服务器端一直运行一个Python脚本,当然就想到了在命令后面加&符号 $ python /data/python/server.py >python.log &说明:  ...

  6. WEB中间件--tomcat爆破,burp和python脚本

    1.tomcat 用burpsuit进行弱口令爆破 先抓包 发送到inturder payload type 选择custom iterater 第一个payload选用户名文件,第二个payload ...

  7. 如何在python脚本开发做code review

    在软件项目开发中,我们经常提到一个词“code review”.code review中文翻译过来就是代码评审或复查,简而言之就是编码完成后由其他人通过阅读代码来检查代码的质量(可编译.可运行.可读. ...

  8. 基于python脚本,实现Unity全平台的自动打包

    转载请标明出处:http://www.cnblogs.com/zblade/ 0. 概述 本文主要针对项目中自动打包过程进行调研,实现用python脚本来打出win/android/ios三个平台下的 ...

  9. Jmeter5.1.1+python调用python脚本

    1.下载jython https://www.jython.org/downloads.html 下载Download Jython 2.7.0 - Standalone Jar : For embe ...

随机推荐

  1. 修改LINUX的时区。

    新装的机器(redhat7)有几台时区不对: 百度了之后找到了以下解决方法输入 tz    依次选择Asia China  east China  Yes 1  然后 export TZ 新开对话发现 ...

  2. DOM常见操作

    一.查找 1.直接查找 document.getElementById           根据ID获取一个标签 document.getElementsByName         根据name属性 ...

  3. 在docker上运行.net core程序

    一.安装docker及镜像 1.在centos上安装docker,命令如下: # yum install docker 2.让docker随机启动: # service docker start# c ...

  4. 【bzoj 2916】[Poi1997]Monochromatic Triangles

    题目描述        空间中有n个点,任意3个点不共线.每两个点用红线或者蓝线连接,如果一个三角形的三边颜色相同,那么称为同色三角形.给你一组数据,计算同色三角形的总数.          输入 第 ...

  5. luoguP4231_三步必杀_差分

    luoguP4231_三步必杀_差分 题意:N 个柱子排成一排,一开始每个柱子损伤度为0.接下来勇仪会进行M 次攻击,每次攻击可以用4个参数l,r ,s ,e 来描述: 表示这次攻击作用范围为第l个到 ...

  6. 我和Python的Py交易》》》》》》 浮点数的身世字谜

    什么是浮点数? 在数据类型中写道,浮点数是带小数点的小数,这个概念是不准确的:浮点数是除了无限不循环小数之外的小数,也就是可以用分数表示的带小数点的数. 好了,浮点数就这些内容,讲完了,各回各家,各找 ...

  7. Windows上安装配置SSH教程(2)——在Windows XP和Windows 10上安装并配置OpenSSH for Windows

    知识点汇总:http://www.cnblogs.com/feipeng8848/p/8559803.html ------------------------ 安装方式有3种: (1)Windows ...

  8. WebGL three.js学习笔记 使用粒子系统模拟时空隧道(虫洞)

    WebGL three.js学习笔记 使用粒子系统模拟时空隧道 本例的运行结果如图: 时空隧道demo演示 Demo地址:https://nsytsqdtn.github.io/demo/sprite ...

  9. 每日分享!JavaScript的鼠标事件(11个事件)

    鼠标的11个事件 具体的事件解释如下: click:按下鼠标(通常是按下主按钮)时触发. dblclick:在同一个元素上双击鼠标时触发. mousedown:按下鼠标键时触发. mouseup:释放 ...

  10. javascript深入浅出图解作用域链和闭包

    一.概要 对于闭包的定义(红宝书P178):闭包就是指有权访问另外一个函数的作用域中的变量的函数. 关键点: 1.闭包是一个函数 2.能够访问另外一个函数作用域中的变量 文章首发地址于sau交流学习社 ...