Python Script executa comandos no Terminal


109

Eu li isso em algum lugar há um tempo, mas não consigo encontrar. Estou tentando encontrar um comando que execute comandos no terminal e, em seguida, produza o resultado.

Por exemplo: o script será:

command 'ls -l'

Vai sair o resultado da execução desse comando no terminal

Respostas:


198

Existem várias maneiras de fazer isso:

Uma maneira simples é usar o módulo de sistema operacional:

import os
os.system("ls -l")

Coisas mais complexas podem ser alcançadas com o módulo de subprocesso: por exemplo:

import subprocess
test = subprocess.Popen(["ping","-W","2","-c", "1", "192.168.1.70"], stdout=subprocess.PIPE)
output = test.communicate()[0]

43
Eu não quero menosprezar você, mas. Você deve usar subprocesso para tudo. É muito mais seguro. subprocess.call () obterá uma interface agradável para substituir o formulário de chamada simples.
Jorge Vargas

Obrigado por essa resposta companheiro. Usarei python para meu primeiro aplicativo no desktop Ubuntu, isso vai realmente me ajudar.
LinuxBill

1
Como posso obter a resposta completa de um comando, os.system("nslookup gmail.com")retorna apenas a última linha 0, mas quero obter a resposta completa.
Parthapratim Neog

3
@JorgeVargas Você pode me ajudar a entender porque o subprocesso deve ser usado para tudo? Por que é mais seguro?
Soutzikevich

38

Eu prefiro o uso do módulo de subprocesso:

from subprocess import call
call(["ls", "-l"])

A razão é que se você deseja passar alguma variável no script, isso é uma maneira muito fácil, por exemplo, pegue a seguinte parte do código

abc = a.c
call(["vim", abc])

Funcionou bem para abrir uma imagem com parâmetros extrascall(["eog", "1breeproposal.png", "-f"])
Josh


4

Você também deve olhar para commands.getstatusoutput

Isso retorna uma tupla de comprimento 2 .. O primeiro é o inteiro de retorno (0 - quando os comandos são bem-sucedidos), o segundo é toda a saída, como será mostrado no terminal.

Para ls

    import commands
    s=commands.getstatusoutput('ls')
    print s
    >> (0, 'file_1\nfile_2\nfile_3')
    s[1].split("\n")
    >> ['file_1', 'file_2', 'file_3']

2
import os
os.system("echo 'hello world'")

Isso deve funcionar. Não sei como imprimir a saída no shell python.



1

Jupyter

Em um notebook Jupyter você pode usar a função mágica !

!echo "execute a command"
files = !ls -a /data/dir/ #get the output into a variable

ipython

Para executar isso como um .pyscript, você precisa usaripython

files = get_ipython().getoutput('ls -a /data/dir/')

executar script

$ ipython my_script.py

0

Você pode importar o módulo 'os' e usá-lo assim:

import os
os.system('#DesiredAction')

0

para python3 use subprocesso

import subprocess
s = subprocess.getstatusoutput(f'ps -ef | grep python3')
print(s)
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.