Existem desvantagens ...
- você não pode ver a saída de
command1
- se
command2
não ler a saída de command1
, o último será interrompido depois de gravar alguma quantidade de saída (vi 4K, mas experimentalmente o limite é de pelo menos 58K para um processo python, veja abaixo ). Isso pode depender do tempo de execução usado por command1
.
- se
command2
parar antes de command1
e command1
gravar em seu stdout, ele receberá [Errno 32] Broken pipe
Experiência:
cmd1
#! /usr/bin/python3
import sys,time
for i in range(64):
print ("*"*1023,file=sys.stdout)
print ("cmd1 here (%d)" % i,file=sys.stderr)
time.sleep(.1)
print ("cmd1 exiting",file=sys.stderr)
cmd2
#! /usr/bin/python3
import sys,time
for i in range(16):
print ("cmd2 here (%d)" % i,file=sys.stderr)
time.sleep(1)
print ("cmd2 exiting",file=sys.stderr)
Executar:
./cmd1 | ./cmd2
Você verá:
-
cmd1
stall na iteração 58 (porque o cmd2 nunca lê nada da sua saída)
-
cmd1
falhando (canal quebrado) quando o cmd2 sai
Então, sim, talvez possa funcionar. E talvez não.