为什么通过python子进程动作在两个请求上都能正常工作而失败?

时间:2019-07-03 08:25:48

标签: python subprocess

尝试使用子流程执行一些操作。大多数情况下,它都能按预期工作,但在需要的地方会在两行中断。

我尝试使用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"])函数,它将很好地工作。

为什么我在上面详述的两行中都无法按预期运行?

0 个答案:

没有答案