- 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的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
我有一系列 SQL 命令,我想在大约 40 个不同的表上运行。必须有一种方法可以在不编写 40 条不同命令的情况下执行此操作... 我在 SQL Server 中运行它。所有表都有不同的名称,我要操作
我习惯在 PHP 中使用命令“mysql_insert_id()”来返回插入到我的数据库中的最后一行的 id。 在 C# 中的 SQLite 中是否有等效的命令? 谢谢! -阿德娜 最佳答案 选择 l
试图找出一种方法来回填 ds 分区 Hive 表的分区。 我知道如何从 CLI 运行 Hive 命令,例如 $HIVE_HOME/bin/hive -e 'select a.col from tab1
我有 .bat 文件。看起来像下一个 ....many commands1 ftp -i -s:copy.txt ...many commands2 copy.txt 包含下一个命令 open ...
基本上我想输入 show 并检查是否有 show 命令或别名已定义并触发它,如果未定义则触发 git show 。 例如 rm 应该执行 rm 但 checkout 应该执行 git checkout
我公司的主数据库是 iSeries 机器,我已经非常习惯使用 DB2 命令和结构。我现在正在尝试做一个小项目,更新一个包含超过 300 万条记录的表。我想出一种比较和“清理”数据的更快方法是使用 My
我想在带有 Node 的终端中制作一个简单的按钮板,并“blessed”用于连接或运行不同的命令。 ----------------------------------------------- _
我们有一个 selenium IDE 脚本,正在转换为 python webdriver。以下命令未转换: [openWindow | http://mywebsite.com/index.php |
我正在学习这个关于从 GIT HUB 下载和安装 Web 文件的在线教程。我进入主题:启动我们的静态网站,系统提示我输入命令以下载和安装 Web 文件。但是,当我输入命令 yarn install 时
我在 shell 脚本中使用 elif 命令时遇到问题,就像在 fortran 中一样。 我有 100 家公司的员工名单。我想屏蔽那些员工少于 500 人的公司。我的脚本是 rm -f categor
我有一些 Linux 命令可以生成 token 。我在 Linux 机器上使用操作系统库形式的 Python 自动化了这些命令。它工作正常。 但是,当我在 Windows 中尝试相同的代码时,它没有返
本文分享自华为云社区《Git你有可能不知道交互式暂存》,作者:龙哥手记。 本节中的几个交互式 Git 命令可以帮助你将文件的特定部分组合成提交。 当你在修改了大量文件后,希望这些改动能拆分为若干提交而
我想知道如何使用 IN 比较语法来做到这一点。 当前的 SQL 查询是: select * from employee where (employeeName = 'AJAY' and month(e
我在这个位置安装了 Hadoop /usr/local/hadoop$ 现在我想列出 dfs 中的文件。我使用的命令是: hduser@ubuntu:/usr/local/hadoop$ bin/ha
是否有一个单一的 docker 命令可用于清除所有内容?如果正在运行,请停止所有容器、删除所有图像、删除所有卷...等。 最佳答案 我认为没有一个命令可以做到这一点。您首先需要停止所有容器使用 $ d
我基本上是在 clojure/nrepl 模式中寻找与 C-u C-x C-e 或 C-c C-p 等效的 Scheme。 我想要一个 C-x C-e 将输出打印到缓冲区,而不是仅仅在 repl 中。
我可以在 vim 中使用 pudb(一个 ncurses Python 调试器),因为,例如,:!python %在实际的终端窗口中运行。我更喜欢使用 gvim,但 gvim 运行 :!python
我正在尝试编写一个 FFMPEG 命令: 取为 输入 一个视频 input.mp4 和一个图像 pic.jpg 作为 输出 将 input.mp4 拆分为 20 秒的视频,按顺序重命名;对于每个分割视
我想转储视频每帧的比特率。我正在尝试使用 -vstats 获取此信息命令。当我运行此命令时 - ffmpeg -i input.mp4 -vstats 它显示至少应该定义一个文件。 如果有人能建议我任
我是一名优秀的程序员,十分优秀!