gTTS Python 脚本在后台获取 tcgetattr():设备不合适的 ioctl



我在我的树莓派 3 上开发一个应用程序,使用gTTSfor Python:

from gtts import gTTS
import os
import threading

def greet_thread(word):
tts_thread = threading.Thread(target = greet, args=[word])
tts_thread.start()
def greet(word):
tts = gTTS(text=word, lang='es')
tts.save("words.mp3")
print 'Reproduciendo audio'
os.system("mpg321 -q presilence.mp3")
os.system("mpg321 -q words.mp3")

如果我直接从 shell 运行 python 脚本,这将完美运行。但是如果我在后台使用以下方法执行 python 脚本:

python -u script.py > log.txt 2>&1 &

我在日志中收到此错误:

tcgetattr(): Inappropriate ioctl for device

也不知道为什么。我认为这是从后台进程调用它的方式,但不知道如何解决它。感谢您的关注和帮助

问题是程序需要使用执行 GUI 的同一用户来执行。因此,如果您要在命令外壳中执行它,请避免使用"root"用户。

就我而言,我也需要程序在启动时执行。所以我使用"自动启动"而不是 crontab 解决了它

  1. 导航到 ~/.config/lxsession/LXDE-pi
  2. 纳米自动启动
  3. 编辑文件:

    @lxpanel --配置文件 LXDE-pi

    @pcmanfm --桌面 --配置文件 LXDE-pi

    你的 script.sh

    //或@python script.py

    @xscreensaver -无飞溅

    @point-RPI

  4. 保存并退出

  5. 重新启动

我在重新启动时通过 crontab 从 bash 脚本启动的 python 脚本调用 mpg321 时遇到了类似的问题。我得到了一个模糊的错误:tcgetattr(): Inappropriate ioctl for device在挖掘了许多线程并尝试了我所能尝试的一切之后,我改为使用omxplayer代替,它似乎已经解决了这个问题。 最好的是,我可以说这是从crontab启动的某种权限问题,因为我可以在终端会话中运行它而不会出现任何问题。

相关内容

  • 没有找到相关文章

最新更新