- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章利用python脚本如何简化jar操作命令由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
前言 。
本篇和大家分享的是使用python简化对jar包操作命令,封装成简短关键字或词,达到操作简便的目的。最近在回顾和构思shell脚本工具,后面一些文章应该会分享shell内容,希望大家继续关注.
获取磁盘中jar启动包 。
这一步骤主要扫描指定磁盘中待启动的jar包,然后获取其路径,方便后面操作java命令:
1
2
3
4
5
6
7
8
9
10
|
#获取磁盘中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值:
1
2
3
4
5
6
|
#获取pid
def
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种,分别如下:
{}代表的是pid和jar包全路径,相关代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
#执行命令
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命令执行成功后才继续下一步的操作;下面是本次分享内容的全部代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
#!/usr/bin/python
#coding=utf-8
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"
) >
=
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))
#获取pid
def
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)
|
总结 。
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我的支持.
原文链接:https://www.cnblogs.com/wangrudong003/p/10423548.html 。
最后此篇关于利用python脚本如何简化jar操作命令的文章就讲到这里了,如果你想了解更多关于利用python脚本如何简化jar操作命令的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
hello1 hello2 hello3 hello4 hello5 hello6
有没有更简短的写法: (apply f (cons a (cons b (cons c d)))) ? 谢谢! (我正在编写一些调用其他函数的辅助函数,这种“模式”似乎经常出现
.NET团队北京时间2024年5月22日已正式发布.NET Aspire ,在博客文章里做了详细的介绍:.NET Aspire 正式发布:简化 .NET 云原生开发 - .NET 博客 (micros
在this dbfiddle demo我有一个 DELETE FROM...WHERE 最后像这样: ...... DELETE FROM data_table WHERE
我有几个 if 语句,如下面的一个。我假设这是一种非常糟糕/长期的编码方式,但不确定我应该做些什么不同的事情。有人有什么建议吗? 谢谢 For a = 1 To Leagues If a =
有什么类似的战术simpl为 Program Fixpoint ? 特别是,如何证明以下无关紧要的陈述? Program Fixpoint bla (n:nat) {measure n} := mat
我使用此代码来跟踪表单上是否有任何更改: $(document).on('input', '.track', function() { var form = $(this); }); 由于这不
我有以下函数,我想用 for 循环来简化它,但不知道该怎么做。任何帮助都感激不尽。基本上,如果字段值为 0 或 null,则我的总值(字段)应为 0,否则,如果字段值从 1 到 1000,则总值变为
我正在尝试对时间字符串执行非常简单的解析 data Time = Time Int Int Int String -- example input: 07:00:00AM timeParser ::
为了使我的代码更具可读性和更简单,我对这段代码绞尽脑汁: var refresh = setInterval(datumTijd, 1000); function datumTijd() { do
这个问题已经有答案了: Check if a variable is in an ad-hoc list of values (8 个回答) 已关闭 9 年前。 只是一个基本的if声明,试图使其更简单
我有一个这样的 if 语句 int val = 1; if (val == 0 || val == 1 || val == 2 || ...); 有没有更简单的方法?例如: int val = 1;
我有一个程序,其中有一些 if 语句,与我将要向您展示的程序类似。我想知道你们是否可以帮助我以任何方式简化这个方程。我之所以问这个问题,是因为在我的 Notepad++ 中,它持续了 443 列,如果
是否可以简化这个 if 语句? 如果是,答案是什么? if (type) { if(NdotL >= 0.0) { color
我有一个包含亚马逊大河的 shapefile。仅 shapefile 就有 37.9 MB,连同属性表高达 42.1 MB。我正在生成所有巴西亚马逊的 PNG 图像,每个 1260x940 像素,sh
System.out.printf("%7s", "a"); System.out.printf("%7s", "b"); System.out.printf("%7s", "c"); S
假设我们有客户端-服务器应用程序,由一个 makefile 编译。服务器使用 libtask 为并行客户端提供服务。客户端使用 ncurses 来处理某些图形。目录树如下所示: ./ --bin/ -
我在 Mono 密码转换的重新实现中找到了这段代码。 我没有修改或简化任何东西 - 这就是它的实际运行方式(有评论如//Dispose unmanaged objects,但实际上什么也没做)。 现在
我需要一些帮助来简化这个包含数百行的庞大代码,但我真的不知道该怎么做。代码看起来真的很乱,我需要的是返回具有预定义文本颜色的模型。有什么简单的方法吗? 我必须多解释一点:- 有一个包含许多型号的手机列
这里有一些代码可以正常工作,但我认为可以简化/缩短。它基本上是点击一个列表项,获取它的 ID,然后根据 ID 显示/隐藏/删除元素。 关于如何使用函数或循环来简化它的建议? $("#btn_remov
我是一名优秀的程序员,十分优秀!