我在我的树莓派 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 解决了它
- 导航到 ~/.config/lxsession/LXDE-pi
- 纳米自动启动
-
编辑文件:
@lxpanel --配置文件 LXDE-pi
@pcmanfm --桌面 --配置文件 LXDE-pi
你的 script.sh
//或@python script.py
@xscreensaver -无飞溅
@point-RPI
-
保存并退出
-
重新启动
我在重新启动时通过 crontab 从 bash 脚本启动的 python 脚本调用 mpg321 时遇到了类似的问题。我得到了一个模糊的错误:tcgetattr(): Inappropriate ioctl for device
在挖掘了许多线程并尝试了我所能尝试的一切之后,我改为使用omxplayer
代替,它似乎已经解决了这个问题。 最好的是,我可以说这是从crontab启动的某种权限问题,因为我可以在终端会话中运行它而不会出现任何问题。