TODO 分析Python3.9和Python2.7的差异 已完成
TODO 使用Python2.7编写Arcgis站点重启脚本 已完成
TODO 了解Arcgis Python服务启停API
TODO 加入Arcgis Python服务监控+启停功能
在前文 随手记录,写了一个自动化监控重启Arcgis站点脚本 中,使用多个cmd脚本+curl进行站点监控和服务启停,存在问题curl超时以后程序会整个卡住,而不是重启服务,考虑到参数没有问题,应该是Windows版本的curl的bug。
打算使用Arcgis自带Python处理该问题。
Arcgis10.6 依托于Python2.7,自带 Python2.7 环境。虽然使用我熟悉的版本Python3.9~3.11是可以解决重启站点的问题,但是Arcgis本身的接口是只支持Python2.7的,为了程序具有扩展性,除了能够处理Arcgis站点服务重启,还能做到Arcgis内的具体每个地图服务重启,要选用Python2.7。
工欲善其事必先利其器,在开始之前,需要了解我熟知的Python3.9和Python2.7之间的差异。
https://www.runoob.com/python/python-2x-3x.html
https://blog.csdn.net/pangzhaowen/article/details/80650478
https://blog.csdn.net/qq_39521554/article/details/80855086
from __future__ import print_function使得Python2.7支持Python3 print() 语法# -*- coding:utf-8 -*-以支持utf-8。input()相当于Python2的row_input(),获取到的就是str类。不过脚本不涉及输入,不影响考虑到扩展性,后续要使用Arcgis提供的API进行地图服务的启停,应当进行操作和监控分离设计
依赖:os库,urllib库,time库
差异:Python2中urllib.request库要改为urllib2库
范本:使用我之前写的重启java应用的文章 SRE从踩坑到牛逼(一)利用Python+CMD进行java应用的监控和重启中的代码进行改造
现代码,基于Python2.7
# -*- coding:utf-8 -*-# 依赖库
from __future__ import print_function
import time
import os
from urllib2 import Request, urlopenclass Configs(object):""" 测试工具所用的所有信息 """def __init__(self):#测试 urlself.urls = {"rest": {"url": "http://127.0.0.1:6080/arcgis/rest/services/","scripts": [ 'net stop "Arcgis Server"', 'ping 127.0.0.1 -n 5', 'taskkill /F /IM ArcSOC.exe', 'ping 127.0.0.1 -n 5', 'net start "Arcgis Server" ' ],"scripts_type": "cmd","status": "200"},}def main():print("running.......")configs=Configs()urls = configs.urlswhile True:# initialfor key in urls.keys():print("check ",key," : ",urls[key]["url"],"\n")req = Request(urls[key]["url"])try:x = urlopen(req)urlcode = x.getcode()if not urlcode == urls[key]["status"]:raise Exception("status ",urlcode)except:if urls[key]["scripts_type"]=="cmd":for script in urls[key]["scripts"]:try:os.system(script)finally:# 忽略报错pass# 为加入Arcgis Python服务监控+启停功能留出代码逻辑# 如果是大于三种脚本方式,建议此处改为函数map以提升效率elif(urls[key]["scripts_type"]=="python"):passelse:passfinally:# x.close()# 这里x.close()引发错误# “UnboundLocalError: local variable 'x' referenced before assignment”# Python3的变量作用域是整个函数,难道Python2不是?# breaktime.sleep(60)if __name__ == "__main__":main()
上一篇:华为智界S7一分钟下线一台车 华为智界S7一分钟下线一台车
下一篇:Meta宣布全新训推一体加速器:完全集成PyTorch 2,性能3倍提升 Meta宣布全新训推一体加速器:完全集成PyTorch 2,性能3倍提升