2017-02-18 1 views
-1

실제로 file.write()와 file.flush()의 차이점은 무엇입니까? Python's official documentation에서파이썬 : file.write() 대 file.flush()

, 나는이 얻을 :

플러시()를 강제 원시 스트림의 버퍼에서 개최 바이트. A 원시 스트림이 차단되면 BlockingIOError가 발생해야합니다.

write (b) 바이트 형 오브젝트 b를 쓰고 쓰여진 바이트 수를 리턴하십시오. 비 블로킹 모드에서 BufferIOError가 발생하면 버퍼가 쓰여 지지만 원시 스트림은 차단됩니다.

내 초보자를 가장 잘 이해하기 위해 현재 메모리에 저장된 정보를 디스크의 파일로 전송합니다. 그러나 write()는 정보가 저장된 양에 대한 정보도 반환하고 flush()는 즉시이 작업을 수행합니다. 그 맞습니까? 그러면 어떤 상황에서 flush()를 통해 write()를 적용하는 것이 더 좋을까요?

+2

그러나'flush'는 인자를 취하지 않습니다. 그것들은 전혀 같지 않습니다. 복사 한 문서는'write'에 대한 인수를 표시하고'flush'에 대해서는 인수를 표시하지 않습니다. 'flush'는'write'를 사용하여 쓰여진 데이터를 강제로 미디어에 덤프합니다. –

+0

두 기능을 모두 사용해 보셨습니까? 그들이 다른 일을한다는 것은 분명해야합니다. – mkrieger1

+0

'write()'는 프로그램의 데이터를 버퍼링 할 수있는 IO 하위 시스템으로 보냅니다. 'flush()'는 버퍼링 된 데이터를 커밋하고자하는 IO 하위 시스템에게 알려줍니다. –

답변

2

[Stephen Rauch 및 Peter Wood의 의견도 참고하십시오.

write (b)는 해당 스트림의 버퍼에 마지막으로 B를 제공합니다. 실제로 모든 바이트를 넣을 수도 있고 그렇지 않을 수도 있으므로 스트림의 아래쪽에서 다른 쪽 끝의 판독기로 '전송'됩니다.

반면에 flush()는 스트림의 버퍼에있는 모든 것을 가져 와서 판독기로 '보냅니다'.

기본적으로 write (b)를 사용하여 데이터를 스트림에로드 한 다음 모든 스트림을 실제로 플러시()하여 모든 스트림이 실제로 기본 스트림에 들어가 '보낸'상태가 아닌지 확인합니다. 스트림의 버퍼에 앉아있다.

예를 들어 PySerial 패키지를 사용하여 컴퓨터를 다른 장치에 연결 한 경우 (스트림으로 효과적으로 작동하는 직렬 연결을 만드는 경우) 일부 데이터를 해당 스트림에 넣으려면 write (b). 그러나 모든 데이터가 직렬 연결을 통해 다른 장치로 전달되었는지 확인하기 위해 flush()를 호출합니다. 이는 write (b)가 해당 데이터의 전부 또는 일부가 실제로 다른 장치로 실제로 전송되도록 보장하지 않기 때문입니다.