Veja um exemplo de um minúsculo servidor python3 autônomo (semelhante ao python2) que mostra apenas um botão html que você pode enviar para gerar uma solicitação POST que você pode usar para executar seu programa. Os urls reais são ignorados neste código simples. Você deve verificar valores razoáveis, etc.
#!/usr/bin/python3
# http://unix.stackexchange.com/a/315334/119298
from http.server import BaseHTTPRequestHandler, HTTPServer
body = """
<body><form method="post" enctype="multipart/form-data" action="/runcmd">
<input type="submit" name="submit" value="Do Update">
</form>
<hr>
"""
class handlerequest(BaseHTTPRequestHandler):
def do_POST(self):
# run my command. if ok:
reply = "result was ok"
self.send_response(200)
self.send_header('Content-type','text/html')
self.end_headers()
self.wfile.write(bytes(body+reply, "utf8"))
def do_GET(self):
self.send_response(200)
self.send_header('Content-type','text/html')
self.end_headers()
self.wfile.write(bytes(body, "utf8"))
server = HTTPServer(('', 80), handlerequest)
server.serve_forever()
Se você já tem um servidor escutando na porta 80, você precisará alterar o que está acima, é claro. O uso de um POST, em vez de apenas uma URL GET, faz com que o navegador peça ao usuário para confirmar a postagem, caso faça uma atualização. Isto é padrão para cgi que tem "efeitos colaterais".