python指令碼簡化jar操作命令

神牛003發表於2019-02-23

本篇和大家分享的是使用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包):\r\n")
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包):\r\n")
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 + "\r\n")
71     if(str == "y"):
72         os.system(strcmd)
73 
74 strDir = raw_input("請輸入jar所在磁碟路徑(預設:/root/job):\r\n")
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("請選擇要執行的編號:\r\n")
82 #執行命令
83 exec_file(strIndex)

 

相關文章