Estou usando este script em python para me conectar a um dispositivo Bluetooth e, em seguida, obter dados, mas quero saber o resultado desse comando shell para fazer os próximos trabalhos
import os
import time
import signal
import subprocess
p = subprocess.Popen("sudo rfcomm connect /dev/rfcomm0 XX:XX:XX:XX:XX:XX 1",shell=True)
(stderr,stdout) = p.communicate()
print 'stderr: [%s]' % stderr
print 'stdout: [%s]' % stdout
time.sleep(5)
while True:
print "Device is ready"
time.sleep(5)
este código é uma amostra quando executo o comando:
"sudo rfcomm connect /dev/rfcomm0 XX:XX:XX:XX:XX:XX 1"
no shell, ele retorna:
Connected /dev/rfcomm0 to XX:XX:XX:XX:XX:XX on channel 1
Press CTRL-C for hangup
mas como posso colocar o resultado acima em uma variável, pois preciso saber o resultado desse comando? Eu uso stdout, stderr no subprocesso, mas não funciona. Estou usando o python 2.7
Subprocesso Python e interação do usuário
link acima falamos sobre como obter output em uma variável em geral, mas o problema da minha dúvida relacionado ao rfcomm, que não coloca seu resultado em variável, eu executo aquele script e eles funcionam bem, mas não funciona quando usado com rfcomm comando
Se estiver usando Python 3.5 ou superior , você pode usar run
. Dessa forma, você terá acesso direto, assim,
result = subprocess.run(["sudo rfcomm connect /dev/rfcomm0 XX:XX:XX:XX:XX:XX 1"], stdout=subprocess.PIPE)
Então acesse o que quiser assim,
result.stdout
Se você usar o Python 2.7 , conforme sugerido pela documentação que vinculei, eles o redirecionam para a seção API de alto nível mais antiga. A partir daí, você perceberá que pode usarcheck_output
result = subprocess.check_output(["sudo rfcomm connect /dev/rfcomm0 XX:XX:XX:XX:XX:XX 1"])
Observe, se você quiser detectar o erro, também use o stderr=subprocess.STDOUT
sinalizador.
result = subprocess.check_output("sudo rfcomm connect /dev/rfcomm0 XX:XX:XX:XX:XX:XX 1", stderr=subprocess.STDOUT, shell=True)
Lasty, há uma coisa importante que você não deve estar ciente,
Por padrão, esta função retornará os dados como bytes codificados. A codificação real dos dados de saída pode depender do comando que está sendo invocado, portanto, a decodificação para texto muitas vezes precisará ser tratada no nível do aplicativo.
EDITAR
Já que seu objetivo parece obter saída durante a execução. Dê uma olhada nesta resposta . Prefiro vincular em vez de reinventar a roda.
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras