尝试使用子流程执行一些操作。大多数情况下,它都能按预期工作,但在需要的地方会在两行中断。
我尝试使用subprocess和subprocess32,并分别尝试导入“运行”和“调用”。它可以在具有Python 2.7.13的Raspberry Pi上运行。
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}"
上使用的引号,但这只会在双引号中产生任何形式的音频波形。单引号导致只有44个字节的静默.wav文件。
如果我用简单的call
测试call(["ls", "-l"])
函数,它将很好地工作。
为什么我在上面详述的两行中都无法按预期运行?