Почему действие подпроцесса python завершается неудачно для двух запросов, когда нормально работает для других? - PullRequest
0 голосов
/ 03 июля 2019

Попытка использовать подпроцесс для выполнения пары действий. Он работает, как и ожидалось, большую часть времени, но разбивается на две строки, где это требуется.

Я попытался использовать подпроцесс и подпроцесс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"]), она отлично работает.

Почему это не сработает, как мы надеялись в двух строчках, которые я подробно описал?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...