Alternativa à biblioteca de comandos no python 2.7 e 3.6

1

Minha pergunta original é aqui: link

Não recebeu nenhuma resposta por lá, então faça uma postagem cruzada aqui.

Eu só quero saber uma alternativa para import commands e commands.getoutput()

a biblioteca de comandos.
 Existe uma maneira de fazer isso usando algo como os ou subprocesso? Obrigado

Se este não for o lugar certo, migre gentilmente minha pergunta para o fórum apropriado. Obrigado.

    
por kRazzy R 09.05.2018 / 23:32

2 respostas

1

commands está obsoleto e deve ser substituído por subprocess chamadas. Um substituto para commands.getoutput() é subprocess.Popen().communicate() :

import subprocess
import shlex


command = shlex.split('/bin/ls -l -a -h')
process = subprocess.Popen(command, stdout=subprocess.PIPE)
stdout, stderr = process.communicate()

bandit provavelmente ainda causará um problema de baixa gravidade porque você ainda usa subprocess , que não é seguro, como qualquer coisa que invoque um shell, mas isso é inevitável. Veja o aviso restante como um lembrete sobre uma insegurança potencial em seu código - dependendo do que você está realmente chamando em um shell, você tem que fazer a verificação você mesmo - é um comando codificado em uma constante de string, ou uma entrada do usuário, ou algo variável dependendo do código de chamada? Em qualquer caso, é sempre aconselhável fazer a higienização, o Python tem o pipes module para isso. / p>     

por 10.05.2018 / 18:17
1

A maneira "padrão" seria subprocess , de acordo com a resposta do hoefling, mas algumas formas mais modernas estão disponíveis se você não se importar em usar bibliotecas externas.

envoy foi substituído por delegante e veja como fica:

In [1]: import delegator

In [2]: print delegator.run('pwd').out
/home/vince

Eu instalei com:

pip install git+https://github.com/kennethreitz/[email protected]
    
por 10.05.2018 / 21:45

Tags