Bash命令在Python中不起作用

斯蒂本

我正在尝试从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)
查尔斯·达菲

此处使用的代码实际上并不需要等待子进程退出(并且不会查看它是否成功,因此无法检测和报告错误)。

更改:

subprocess.Popen(args)

...至...

subprocess.check_call(args)

...要么...

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

另外,您将需要更改'"pbx"'为just 'pbx'; 原始bash版本中的双引号是句法,就像Python版本中的单引号一样-除了语法引号外,您不需要文字引号。(可选地,Bash允许不需要使用语法引号来防止不必要的扩展,使原本在语法上有意义的字符文字等);对于Python,在定义字符串时它们始终是必需的)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章