Вам необходимо отправить всю программу сразу.
Когда вы вызываете run, python < p1оболочка ожидает ввода перед вызовом python. То есть, питон не даже начать выполнение на всех , пока весь поток данных не считан оболочкой , а затем передается в полном объеме в python.
Даже при запуске python -u p1вместо этого (то есть без буферизации и чтения из файла p1) pythonбудет пытаться прочитать весь файл, прежде чем он выполнит какой-либо из них.
Попробуйте этот эксперимент.
Терминал 1:
mkfifo p1
python < p1
Терминал 2:
cat > p1
print "Hello World"
print "Hello World"
Вы увидите, что можете отправлять несколько строк, но Python в термине 1 ничего не делает. Теперь нажмите ctrl+ D. Вся программа выполняется сразу.
Итак, подведем итог: если вы хотите, чтобы python читал из канала, вам нужно отправить всю программу. Вы не можете использовать Python в интерактивном режиме таким образом.
exec 3> p1делает и что такое&3&exec 3> &1? Спасибо.