deixe o usuário do Win ou Mac iniciar um script na minha caixa unix [closed]

0

Eu tenho um script python com um único parâmetro (tablename) em uma caixa UNIX que desejo expor aos meus colegas na intranet corporativa. Ou seja Quero permitir que determinados usuários de sistemas diferentes executem o programa em uma máquina específica. Existe uma solução padrão para isso?

O script não tem saída necessária para ser mostrado ao usuário. Os colegas têm todos os sistemas operacionais possíveis e eu gostaria de ter uma solução simples e minimalista, que qualquer um poderia usar e que fosse fácil de instalar. Algo como digitar 'telnet hostname scriptname nome da tabela' em um prompt shell / cmd em seu sistema faria por uma interface. Nenhuma autenticação é necessária. Eu posso criar uma interface web, é claro, mas parece ser um exagero para uma tarefa tão simples quanto isso.

Se isso pode ser feito com o telnet, você poderia me indicar um exemplo?

    
por Diego 09.10.2016 / 19:18

1 resposta

1

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".

    
por 09.10.2016 / 22:03