Команда Bash не работает в Python - PullRequest
0 голосов
/ 22 мая 2018

Я пытаюсь выполнить следующую команду bash из Python или Perl:

googlesamples-assistant-pushtotalk --credentials /home/jsti/.config/google-oauthlib-tool/credentials.json
--device-model-id 'pbx-assista' --device-id 'pbx' -i /tmp/google_audio1314_in.wav -o /tmp/google_audio1314_out.wav -v

По сути, идея заключается в том, чтобы отправить аудио в Google Assistant, после чего он должен ответить мне на аудио сдругой звук.Я должен получить аудиофайл в ответ от Google Assistant, но я его не получаю.Нет ошибок, но файл не приходит.

Команда работает правильно, если я выполняю ее в терминале.

Кто-нибудь знает, что происходит с этой командой?

Это код:

#!/usr/bin/env python
import sys
from asterisk.agi import *
import subprocess

command = "googlesamples-assistant-pushtotalk"
oauth_dir = "/home/jsti/.config/google-oauthlib-tool/credentials.json"
audio_in = "/tmp/google_audio1314_in.wav"
audio_out = "google_audio1314_out.wav"

agi = AGI()
agi.verbose("python agi started")
callerId = agi.env['agi_callerid']
agi.verbose("call from %s" % callerId)

while True:
  args = [command, '--credentials', oauth_dir, '--device-model-id', '"pbx-assista"', '--device-id', '"pbx"', '-i', audio_in, '-o', audio_out, '-v'  ]
  subprocess.Popen(args)

Ответы [ 2 ]

0 голосов
/ 26 мая 2018

Используемый здесь код на самом деле не дожидается завершения подпроцесса (и не проверяет, успешно ли он выполнен, и поэтому не может обнаруживать и сообщать об ошибках).

Изменить:

subprocess.Popen(args)

... до ...

subprocess.check_call(args)

... или ...

p = subprocess.Popen(args)
p.wait()

Кроме того, вы будетехочу изменить '"pbx"' на 'pbx';двойные кавычки в исходной версии bash являются синтаксическими, как и одинарные кавычки в версии Python - вам не нужны буквальные кавычки в дополнение к синтаксическим.(Опционально, Bash позволяет исключать синтаксические кавычки, когда они не нужны для предотвращения нежелательного расширения, делать буквально-значимые символы, в противном случае буквальными и т. Д .; в Python они всегда обязательны при определении строки)

0 голосов
/ 22 мая 2018

Избавьтесь от двойных кавычек вокруг "pbx-assista" и "pbx".

args = [command, '--credentials', oauth_dir, '--device-model-id', 'pbx-assista', '--device-id', 'pbx', '-i', audio_in, '-o', audio_out, '-v']
...