Sto provando a chiamare uno script di shell in python, ma continua a segnalare errori di pipe non funzionanti (il risultato è OK, ma non voglio vedere il messaggio di errore in STDERR). Ho individuato la causa, e può essere riprodotto come il seguente frammento:Python: subprocess.call pipe interrotte
subprocess.call('cat /dev/zero | head -c 10 | base64', shell=True)
AAAAAAAAAAAAAA ==
gatto: scrivere errore: tubo rotto
/dev/zero
è un flusso infinito, ma il head -c 10
legge solo 10 byte da esso ed esce, quindi cat riceverà SIGPIPE perché il peer ha chiuso la pipe. Non c'è nessun messaggio di errore di pipe rotto quando eseguo il comando in shell, ma perché python lo mostra?
L'errore va via quando si salta il [uuoc] (https://en.wikipedia.org/wiki/ Cat_% 28Unix% 29 # Useless_use_of_cat): 'subprocess.call ('testa -c 10 dev/zero | base64', shell = True)' –
@larsmans: potresti metterlo come risposta –
@ChrisMorgan: in realtà, Preferisco fortemente la tua risposta. –