그러나 파이프를 사용하면 data.txt
파일이 만들어지지 않는다. 이 차이는 커다란 영향을 미친다. 우리가 처리할 수 있는 입력 스트림과 출력 스트림의 크기 제한을 모두 없애기 때문이다(물론 데이터가 아주 많으면 처리하는 데 시간은 오래 걸릴 수 있다). 예를 들어 컴퓨터에 수십억 개의 숫자를 저장할 공간이 없을 때 예제에서 1000
대신 1000000000
을 지정해 난수 십억 개를 생성한다고 가정해보자. randomseq.py
가 stdio.writeln()
을 호출할 때 스트림의 끝에 문자열이 추가되고, average.py
가 stdio.readFloat()
를 호출할 때 스트림의 시작 부분에서 문자열이 제거된다. 정확히 언제 이 함수들이 호출되는지는 운영 체제에 따라 다르다. randomseq.py
가 어느 정도 출력한 후에 average.py
를 실행해 출력된 스트림을 소비할 수도 있고, average.py
가 입력 스트림 데이터가 필요해지면 randomseq.py
가 어느 정도 출력하도록 실행할 수도 있다. 어느 방식으로 실행하든 결과는 같으며, 우리가 구현하는 프로그램은 그저 입력과 출력 스트림만 처리하면 되므로, 구체적으로 어떤 방식으로 스트림에 데이터가 생성되고 소비되는지에 대해서는 신경 쓸 필요 없다.
필터 원래 1970년대 초반 유닉스 시스템에서 제공하던 핵심 기능인 파이프는 개별 프로그램들이 쉽게 통신할 수 있게 해주므로 최신 운영 체제에서도 살아남았다. 오늘날까지 사용되고 있는 수많은 유닉스 프로그램들이 원래 프로그램의 개발자가 상상했던 것보다 수백만 배나 더 큰 파일도 처리하고 있다는 사실은 이 기능이 얼마나 막강한지 잘 보여준다. 함수를 호출해 다른 파이썬 프로그램과 통신할 수 있지만, 표준 입력과 표준 출력은 다른 시기에 다른 언어로 작성된 프로그램과도 통신할 수 있게 해준다. 표준 입력과 표준 출력을 사용하면 외부 세계와 쉽게 연결할 수 있다.