Executando um Programa Externo sem Impedir o Funcionamento do Programa em Python

Publicado por Mauricio Ferrari em 11/11/2021

[ Hits: 3.210 ]

Blog: https://www.youtube.com/@LinuxDicasPro

 


Executando um Programa Externo sem Impedir o Funcionamento do Programa em Python



Esse é um macete bem simples para quem deseja criar um comando ou um programa em Python e deseja executar outro comando ou programa externo sem impedir o funcionamento da ferramenta que você desenvolveu. Eu precisei de algo assim e tive dificuldades de encontrar uma solução, por isso, optei por uma solução alternativa.

Em um programa que eu estou desenvolvendo criei essa função para executar um programa externo com o uso do subprocess com o apelido de sh. Esse comando será retirado de um arquivo desktop por outra função que não será apresentada nessa dica.

[ ... ]

import subprocess as sh

[ ... ]

def launch(lab, lst):
    try:
        lab.config(text=lst.get(ANCHOR))
        text = 'Name=' + lst.get(ANCHOR) + "\n"
        command = extract_command(text)
        if not command:
            raise Exception('Command not selected!')
        print("\033[32mRunning: \033[36m" + command + "\033[m")
        sh.call(command, shell=True)
    except Exception as msg:
        ut.info_log(msg)

[ ... ]

Parece tudo certo. Os três pontos entre colchetes, são os códigos omitidos. O que nos interessa aqui é o subprocess.call que está como sh.call. Acontece que, dessa forma o programa não vai voltar a funcionar até que o programa aberto não seja finalizado, impedindo outras operações que podem vir a ser feitas no programa. E não encontrei um módulo alternativo que me proporcionasse isso.

Como eu tenho bastante conhecimento em shell, optei por usar uma alternativa que libera o programa do emulador de terminal após a execução, que é a inserção do '&' no final do comando.

[ ... ]

import subprocess as sh

[ ... ]

def launch(lab, lst):
    try:
        lab.config(text=lst.get(ANCHOR))
        text = 'Name=' + lst.get(ANCHOR) + "\n"
        command = extract_command(text)
        if not command:
            raise Exception('Command not selected!')
        print("\033[32mRunning: \033[36m" + command + "\033[m")
        sh.call(command + ' &', shell=True)
    except Exception as msg:
        ut.info_log(msg)

[ ... ]

O espaço antes do '&' é necessário para não colar o caractere no comando ao concatenar. Dessa forma o comando é executado sem impedir o funcionamento do programa em python, pois assim ao executar essa instrução, o call quando abrir o shell para executar o comando o '&' já vai liberar o programa do terminal e o call vai entender que o comando já foi executado com sucesso e vai finalizar.

É um macete bem simples e bem prático. Abraços.

Outras dicas deste autor

Frescuradas no Interpretador de Comandos do Terminal no Linux

Incluindo o libmediainfo corretamente em um arquivo CMakeFiles.txt para uso em seus projetos

Resetando as configurações do mate-terminal

Integrando AppImage no Debian, Ubuntu e Linux Mint

EasyMP3Gain no Debian, Ubuntu e derivados

Leitura recomendada

TradutorOOoNote - plugin para OpenOffice.org que traduz textos para qualquer língua

Novo TradutorOOoNote substitui texto e envia o antigo para anotação

TP-1 Engine - motor para criação de jogos

Função para Abrir uma Interface do tkinter no Centro da Tela em Python

Tropycal RPG Engine BETA

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts