Попытка использовать подпроцесс для выполнения пары действий. Он работает, как и ожидалось, большую часть времени, но разбивается на две строки, где это требуется.
Я попытался использовать подпроцесс и подпроцесс32, с импортом «run» и «call» при отдельных попытках. Это работает на Raspberry Pi с Python 2.7.13.
import time
from subprocess import call
# Set the message
message = "I am too sexy for my satellite."
# Write message to a file
f= open("/home/pi/rre/alerts/alert.txt","w+")
f.write(message)
f.close()
# Make a wav file from the txt file
call(["read", "buffer", "<", "/home/pi/rre/alerts/alert.txt"]) # First problem happens here
call(['pico2wave', '-w=/home/pi/rre/alerts/alert.wav', '"${buffer}"']) # Second problem happens here
# And play it
call(["aplay", "/home/pi/rre/alerts/alert.wav"])
При запуске результат:
File "../audiotest.py", line 13, in <module>
call(["read", "buffer", "<", "/home/pi/rre/alerts/alert.txt"])
File "/usr/lib/python2.7/subprocess.py", line 168, in call
return Popen(*popenargs, **kwargs).wait()
File "/usr/lib/python2.7/subprocess.py", line 390, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1024, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
Однако, если я запускаю из CLI: read buffer < /home/pi/rre/alerts/alert.txt
, это работает нормально.
В следующей строке обнаружена проблема с частью '"${buffer}"'
. Он отлично работает из CLI: pico2wave -w=/home/pi/rre/alerts/alert.wav "${buffer}"
, но когда я отбрасываю предыдущую строку и загружаю буфер вручную, кажется, что работает, однако сообщение в файле alert.wav является голосовым фронтом, а не текстом в файле alert.txt, как предназначен и как это сделано, когда из CLI. Я экспериментировал с изменением кавычек, используемых на "${buffer}"
, но это будет генерировать любой аудио-WAV только в случае двойных кавычек. Одиночные кавычки приводят к тому, что файл без вывода сообщений .wav всего 44 байта.
Если я проверю функцию call
с помощью простого call(["ls", "-l"])
, она отлично работает.
Почему это не сработает, как мы надеялись в двух строчках, которые я подробно описал?