Possibilitar a execução de um arquivo em lote a partir de outro dispositivo (smartphone/PC) usando Python.

この記事は約9分で読めます。
スポンサーリンク

Coisas que eu quero fazer

Isso permitirá que você execute um arquivo em lote (bat) a partir de outro dispositivo (smartphone/PC) usando Python.

fundo

Eu queria executar um arquivo em lote do meu smartphone no Windows, mas usar a área de trabalho remota parecia um pouco complicado, e minhas pesquisas indicavam que ela tinha uma má reputação. Então, configurei um servidor web no Windows e acessei-o do meu smartphone via web para executar o arquivo em lote.

visão geral

Prepare o arquivo em lote.

Escreva o código em Python. (Sobrescreva o servidor Python)

Iniciando um servidor web com Python

Acessando o servidor web a partir de outros dispositivos

O HTTPS não pode ser usado com este método.

Por favor, tome precauções de segurança, como limitar o acesso à rede local (LAN).

スポンサーリンク

Preparar

Instalando o Python

Caso o Python não esteja instalado, faça o download e instale-o na página seguinte.

Welcome to Python.org
The official home of the Python Programming Language

Criando um arquivo em lote

Crie um arquivo em lote contendo o processo que você deseja executar. Aqui, nomeamos o arquivo como `process.bat`.

Implementação de processamento do servidor (Python)

Crie o arquivo OriginalServer.py com o seguinte conteúdo.

import http.server
import socketserver
import subprocess
import os

BAT_FILE_PATH = "process.bat"

PORT = 8000
HANDLER_CLASS = http.server.SimpleHTTPRequestHandler

class CustomHandler(HANDLER_CLASS):
    def do_GET(self):
        if self.path == '/run_bat':
            self.run_batch_file()
        else:
            super().do_GET()

    def run_batch_file(self):
        try:
            result = subprocess.run(
                [BAT_FILE_PATH],
                shell=True,
                capture_output=True,
                text=True,
                check=True
            )

            self.send_response(200)
            self.send_header("Content-type", "text/html; charset=utf-8")
            self.end_headers()

            html_content = f"""
            <html>
            <head><title>BAT Execution Result</title></head>
            <body>
            <h1>RESULT for '{BAT_FILE_PATH}'</h1>
            <h2>STD OUT:</h2>
            <pre>{result.stdout}</pre>
            <h2>STD ERR:</h2>
            <pre>{result.stderr}</pre>
            <p><a href="/">Return to root</a></p>
            </body>
            </html>
            """
            self.wfile.write(html_content.encode('utf-8'))

        except subprocess.CalledProcessError as e:
            print(f"Error while bat process: {e}")
            self.send_error(
                500,
                "Internal Server Error",
                f"Error while bat process: {e.stderr or e.stdout}"
            )
        except Exception as e:
            print(f"Unexpected error: {e}")
            self.send_error(
                500,
                "Internal Server Error",
                f"Erroe in Server: {str(e)}"
            )

def run_server():
    with socketserver.TCPServer(("", PORT), CustomHandler) as httpd:
        print(f"Starting server with port {PORT} ...")
        print(f"URL to execute bat: http://localhost:{PORT}/run_bat")
        
        try:
            httpd.serve_forever()
        except KeyboardInterrupt:
            print("\nThe server is stopping")
            httpd.shutdown()

if __name__ == "__main__":
    if not os.path.exists(BAT_FILE_PATH):
        print(f"Error: file '{BAT_FILE_PATH}' does not exist.")
        exit(1)
    
    run_server()

Se o arquivo em lote que você está executando não for process.bat, corrija o FILE_PATH.

Explicação do código

A instrução `do_GET(self):` executa `run_batch_file` quando `/run_bat` é acessado usando o método GET. Quando qualquer outro diretório é acessado, o processamento normal (retornando um arquivo no servidor) é realizado.

O método `run_batch_file(self)` executa um arquivo em lote e, se bem-sucedido, retorna o resultado da execução em HTML.

O servidor modificado é iniciado usando `run_server()`. (Esta função é chamada no final do arquivo.)

スポンサーリンク

execução

Lado do servidor

Coloque o arquivo em lote criado (Process.bat) e o arquivo OriginalServer.py na mesma pasta.

Navegue até a pasta que contém os arquivos .bat e .py usando um prompt de comando ou ferramenta similar e execute o seguinte comando.

python OriginalServer.py

Lado do cliente (outro PC/smartphone, etc.)

Assim que o servidor terminar de iniciar, abra seu navegador e acesse http://[ServerのIP]Acesso: 8000/run_bat.

Seguindo os passos acima, conseguimos executar um arquivo em lote no Windows a partir do cliente.

Uma vez que o servidor é iniciado, ele pode ser executado repetidamente pelos clientes até que seja desligado.

コメント

タイトルとURLをコピーしました