Isso porque:
-
O
- python executa o buffer de saída se for redirecionado para um canal ou arquivo.
-
http.server
escreve a primeira linha para stdout e depois acessa os logs para stderr.
Você precisa fazer como:
exec 3< <(python3 -u -m http.server 2>&1)
Falando sobre sua meta, suponho que o script precise continuar lendo o canal mesmo depois de obter essa saída específica, porque o subprocesso deixará de ser executado assim que sua saída para o canal for bloqueada.