Вы не дожидались завершения каких-либо процессов.Чтобы сделать его эквивалентным выполнению команд оболочки по одной, вам нужно ставить вызов process.wait()
после каждого Popen
, чтобы команда заканчивалась до запуска следующего процесса.В этом случае aplay
зависит от pico2wave
, записывающего ввод aplay
, и зависит от того, rm
не удалит его до того, как у него появится возможность открыть его и прочитать содержимое.
Безprocess.wait()
, это все равно что запустить (обратите внимание на фон &
) это в оболочке:
pico2wave --lang=de-DE --wave=/tmp/test.wav "Test" &
aplay /tmp/test.wav &
rm -f /tmp/test.wav &
, которая вводит все виды ужасных условий гонки.