GIS数据共享:官方网站

python

当前位置:首页 > language > python

使用python执行shell并开放http接口

使用python执行shell并开放http接口

        由于实际工作的需要,需要重启某一服务,人工登录内网服务器较为麻烦。因此将重启服务命令写到脚本文件,并使用Python的wsgiweb服务器提供外部访问,使用subprocess执行shell文件。本次示例代码以Linux服务器默认的python2.7为例。shell文件位于脚本同目录下的test.sh文件。注意要给test.sh给与执行权限。如果需要传参,参数直接跟在sh文件后面(与正常sh文件执行传参方法一致)

        为了保证服务安全,在执行一次重启命令后服务能完成重启,特此设置重启时间间隔,本例以10秒为间隔,如果在10秒内重启,则提示用户重启失败。

# -*- coding: UTF-8 -*-
import time
import json
import subprocess
pretime = time.time()
def application(environ, start_response):
    global pretime
    nowtime = time.time()
    """
    environ 是包含所有HTTP请求信息的dict对象
    start_response 是发送HTTP响应的函数
    start_response用于发送HTTP响应Header, 只能发送一次, 接收两个参数, 第一个参数是响应码, 第二个参数是响应Header
    :param environ:
    :param start_response:
    :return:
    """
    # HTTP请求信息也放在environ里, 只不过有HTTP_前缀 如HTTP_USER_AGENT
    # print(environ)
    print("JAVA_HOME={}".format(environ.get("JAVA_HOME")))
    print("USER_AGENT={}".format(environ.get("HTTP_USER_AGENT")))
    data = ""
    if nowtime-pretime < 10:
        data = {"result": "error","msg": u"do not click again within 10 seconds,"+"%s seconds left" % (int(10-(nowtime-pretime)))}
    else:
        try:
            print(subprocess.call('./test.sh', shell=True))
            data = {"result": "success","msg": u"resatrt success"}
            pretime = time.time()
        except:
            data = {"result": "error","msg": u"please check service log"}
        
    response = json.dumps(data)
    # 发送HTTP Response Header
    start_response('200 OK', [('Conten-Type', 'application/json')])
    return [bytes(response, 'utf8')]
from wsgiref.simple_server import make_server
# 创建服务器
httpd = make_server("localhost", 8080, application)
print("Serving HTTP on port 8080 ...")
# 开始监听HTTP请求
httpd.serve_forever()



扫码查看

相关内容

文章评论

表情

共 0 条评论,查看全部
  • 这篇文章还没有收到评论,赶紧来抢沙发吧~

热门标签