【发布时间】:2018-11-01 10:29:30
【问题描述】:
我正在尝试从 Python 或 Perl 执行下一个 bash 命令:
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 助理发送音频,之后,它应该用另一个音频回复我的音频。我应该收到一个音频文件作为 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)
【问题讨论】:
-
我已经在问题中包含了代码。抱歉来晚了
-
我注意到您没有使用
wait()、call()或其他任何实际上让子进程在继续之前完成的东西。我特别建议subprocess.check_call(args)在发生故障时抛出异常,而不是让它们被忽视。 -
如果在
while循环之后你的程序真的结束了,并且你从来没有等待你的程序完成,那么......好吧......当然 i> 他们将无法在脚本结束之前完成。 -
代码到此结束,因为这是最重要的部分,但仍然无法正常工作。我尝试了下一个代码,但它不起作用: process = subprocess.Popen(...) process.wait()
-
@CharlesDuffy,你是对的。通过使用“wait()”或“call()”,代码可以正常工作。谢谢。
标签: python google-assistant-sdk google-assist-api