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.

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


コメント