由于每次重启电脑之后需要重新进入sonar文件夹中启动sonar服务,比较繁琐。刚好最近在学习Python,就想着是否可以通过Python写个脚本来启动sonar,省去多余的工作量。
因为使用Python执行shell命令需要使用到os库,所以先简单学习了一下os,其实只需要用到os的一个方法 os.system()
这个方法就是用于执行shell命令的。
制作菜单
需要满足基本操作:启动/停止/重启三个功能:
sonar_o = ['启动sonar', '停止sonar', '重启sonar']
print('欢迎使用Sonar静态代码扫描服务')
i = 1
for s in sonar_o:
print(i, s)
i = i + 1
打印结果:
欢迎使用Sonar静态代码扫描服务
1 启动sonar
2 停止sonar
3 重启sonar
接收输入的操作符
根据菜单编号执行相应操作,需要接收控制台输入:
menu = int(input("请输入操作:"))
这只是接收控制台输入,接收到的值存在存在menu中,还需要处理异常情况,比如:如果输入的菜单编号<1或>3是不合法的,需要重新输入:
menu = int(input("请输入操作:"))
if menu in range(1, 4):
# 执行操作
return
else:
printMenu()
这里用到range(x,y)这个函数,这是系统函数,作用是生成一个范围list。因为我们允许接收1,2,3这三个参数,所以使用range(1,4),返回的结果是1,2,3,正好符合我的需求。
执行命令
通过os.system()执行shell命令
sonar_cmd这个变量存储的是sonar.sh这个脚本的目录,完整的命令是通过在脚本目录后加上相关命令。
如果输入的是1则执行start 命令
如果输入的是2则执行stop命令
如果输入的是3则执行restart命令
def execCmd(op):
sonar_cmd = '/usr/local/sonarqube-6.7.4/bin/macosx-universal-64/./sonar.sh '
if op == 1:
os.system(sonar_cmd + 'start')
elif op == 2:
os.system(sonar_cmd + 'stop')
elif op == 3:
os.system(sonar_cmd + 'restart')
优化流程
有时候需要停止服务之后又需要启动或重启服务。所以,在操作完之后需要再次询问是否需要继续操作,需要就再次打印菜单,根据用户输入执行相应命令;否则退出程序。
def execCmd(op):
sonar_cmd = '/usr/local/sonarqube-6.7.4/bin/macosx-universal-64/./sonar.sh '
if op == 1:
os.system(sonar_cmd + 'start')
elif op == 2:
os.system(sonar_cmd + 'stop')
elif op == 3:
os.system(sonar_cmd + 'restart')
re = input('是否需要继续操作?y(继续操作) n(任意键退出)')
if re == 'y':
printMenu()
else:
exit()
至此,一个简易的sonar控制程序就完成了,以下贴出完整代码:
import os
def printMenu():
sonar_o = ['启动sonar', '停止sonar', '重启sonar']
print('欢迎使用Sonar静态代码扫描服务')
i = 1
for s in sonar_o:
print(i, s)
i = i + 1
menu = int(input("请输入操作:"))
if menu in range(1, 4):
execCmd(menu)
return
else:
printMenu()
def execCmd(op):
sonar_cmd = '/usr/local/sonarqube-6.7.4/bin/macosx-universal-64/./sonar.sh '
if op == 1:
os.system(sonar_cmd + 'start')
elif op == 2:
os.system(sonar_cmd + 'stop')
elif op == 3:
os.system(sonar_cmd + 'restart')
re = input('是否需要继续操作?y(继续操作) n(任意键退出)')
if re == 'y':
printMenu()
else:
exit()
printMenu()
网友评论