本篇和大家分享的是使用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. Latex appendix 生成附录A和B

    第一种: \documentclass[a4paper,12pt]{cctart} \begin{document}     main body %正文内容   \appendix   \renewc ...

  2. 再谈.net的堆和栈---.NET Memory Management Basics

    .NET Memory Management Basics .NET memory management is designed so that the programmer is freed fro ...

  3. java.lang.IllegalArgumentException异常 配置文件的问题

    java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: Student is ...

  4. BZOJ_[usaco2007 Nov]relays 奶牛接力跑_离散化+倍增弗洛伊德

    BZOJ_[usaco2007 Nov]relays 奶牛接力跑_离散化+倍增弗洛伊德 Description FJ的N(2 <= N <= 1,000,000)头奶牛选择了接力跑作为她们 ...

  5. BZOJ_3626_[LNOI2014]LCA_离线+树剖

    BZOJ_3626_[LNOI2014]LCA_离线+树剖 题意: 给出一个n个节点的有根树(编号为0到n-1,根节点为0).一个点的深度定义为这个节点到根的距离+1. 设dep[i]表示点i的深度, ...

  6. vim永久显示行号

    先复制一份vim配置模板到个人目录下,如果目录不对的,自己找到这个文件 cp /usr/share/vim/vim74/vimrc_example.vim ~/.vimrc 注:redhat的路径为  ...

  7. java游戏开发杂谈 - 有限状态机

    在不同的阶段,游戏所运行的逻辑.所显示的界面,都是不同的. 以五子棋举例,游戏开始.游戏中.胜负已分,对应的界面和逻辑都不同. 在游戏中,又分为:自己下棋.对方下棋.游戏暂停.悔棋等多个状态. 再比如 ...

  8. Android Gradle基于参数化配置实现差异化构建

    一.背景: 项目中有一些特殊的需求,如个别渠道集成腾讯bugly,个别渠道集成易观统计,不同的渠道集成不同的推送策略(如Oppo渠道优先Opush推送),不同的渠道拥有不同的第三方登录集成等等.这些需 ...

  9. 性能测试入门 — LoadRunner 使用初探

    前言: 性能测试是利用产品.人员和流程来降低应用程序.升级程序或补丁程序部署风险的一种手段.性能测试的主要思想是通过模拟产生真实业务的压力对被测系统进行加压,验证被测系统在不同压力情况下的表现,找出其 ...

  10. Protobuf 语言指南(proto3)

    Protobuf 语言指南(proto3) Protocol Buffer是Google的语言中立的,平台中立的,可扩展机制的,用于序列化结构化数据 - 对比XML,但更小,更快,更简单.您可以定义数 ...