Чтобы иметь возможность выполнять как ./ disk.py
, вы нужны две вещи:
#! / usr / bin / env python
chmod + x disk.py
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
.