Pytanie: Czy istnieje sposób użycia flush=True
dla funkcji print()
bez uzyskania BrokenPipeError
?BrokenPipeError in Python
Mam skrypt pipe.py
:
for i in range(4000):
print(i)
nazywam to tak z linii poleceń systemu UNIX:
python3 pipe.py | head -n3000
I powraca:
0
1
2
Więc robi ten skrypt :
import sys
for i in range(4000):
print(i)
sys.stdout.flush()
Jednak, kiedy uruchomić ten skrypt i rury go do head -n3000
:
for i in range(4000):
print(i, flush=True)
Potem dostaję ten błąd:
print(i, flush=True)
BrokenPipeError: [Errno 32] Broken pipe
Exception BrokenPipeError: BrokenPipeError(32, 'Broken pipe') in <_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'> ignored
Próbowałem również rozwiązanie poniżej, ale wciąż uzyskać BrokenPipeError
:
import sys
for i in range(4000):
try:
print(i, flush=True)
except BrokenPipeError:
sys.exit()
Nie mogę odtworzyć go na OS X 10.1 0, próbując centOS 6.6 teraz. – jgritty
Po prostu próbowałem na OS X 10.9.4 i nie byłem w stanie go odtworzyć. Mam błąd w systemie Ubuntu 12.04.2 LTS. Spróbuję na Linux Mint Qiana. –
Wszystkie swoje skrypty łamią się dla mnie, z wyjątkiem pierwszego ... – phantom