Вызов HandBrakeCLI внутри скрипта разрывает цикл

Чтобы иметь возможность выполнять как ./ disk.py , вы нужны две вещи:

  1. Измените первую строку на эту: #! / usr / bin / env python
  2. Сделайте скрипт исполняемым: chmod + x disk.py
2
27.01.2019, 20:48
1 ответ

whileв том виде, в каком он написан, небезопасно для использования, так как здесь стандартный ввод используется совместно процессами, поэтому HandBrakeCLI, вероятно, также потребляет стандартный ввод. Это можно увидеть на минимальном примере:

$ printf "a\nb\nc\n" \
| while IFS= read -r x; do echo $x; sed 's/$/ sed was here/'; done
a
b sed was here
c sed was here

и, таким образом, цикл whileзавершается раньше, так как больше нечего читать из стандартного ввода после того, как sedнарисовал граффити вверх по строкам.

Обходной путь заключается в том, чтобы надеяться и молиться, чтобы ничто другое в коде не использовало какой-то другой файловый дескриптор, скажем3

while IFS= read -u 3 -r x; do
  echo $x
  sed 's/$/ sed read this line/'
done 3< <(printf "a\nb\nc\n")

или для переключения на другой язык программирования.(sedтеперь будет зависать, если вы каким-то образом не подадите ему стандартный ввод.)

Другим вариантом может быть закрытие стандартного ввода для вашей программы, например.

HandBrakeCLI... <&-

, так как это не позволит ему увидеть стандартный ввод, необходимый циклу while.

0
27.01.2020, 22:29

Теги

Похожие вопросы