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

Publicado por Mauricio Ferrari em 11/11/2021

[ Hits: 3.251 ]

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

Adicionando e listando as regras criadas na lista de exceções do slackpkg usando egrep e sed

Contador de Palavras no Terminal

Instale pacotes pelo apt através de uma lista

Extraindo Arquivos de Pacote de Tema do Windows (themepack) no Linux

Fazendo Upload no Git pelo Terminal

Leitura recomendada

Python - Diferença entre == e is

Carteira de Bitcoin Electrum no Linux

Subliminal: buscando legendas via terminal

Como descobrir seu chat_id no Telegram

Nomes de arquivos e codificação

  

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