Или вызывайте вот так:
print(subprocess.getoutput('./1.py'))
Так вы дождётесь полного выхлопа.
Но если выхлопа много, то лучше запускать иначе, чтобы получить выходной пайп и вычитывая его в цикле слать всё на stdout __main__
UPD: Дополню ответ, а то часть оказалась в комментариях.
Такое происходит потом, что при перенаправлении выхлопа в файл происходит буфферизация. Накопительный буффер сбрасывается в файловую систему по факту своего заполнения или принудительно (по команде flush или по факту завершения процесса).
При выхлопе, направленном в терминал, буфферизации нет и всё, что выводится, попадает в терминал сразу.
Но если бы каждый байт писался в файловую систему без буффера, то это быо бы чертовски медленно и заставляло бы постоянно дёргаться картеку (реальную или виртуальную) лочного девайса, на котором у нас файловая система.
Так и получается, что
- сперва в stdout материнского процесса попадает некий текст,
- потом запускаеется дочений процесс и что-то пишет в свой stdout,
- потом дочерний процесс закрывается и сбрасывает накопившийся буффер, который перенаправляется по цепочке в выходной файл,
- потом закрывается материнский процесс и весь его недозаполненный буфер тоже сбрасывается в файл.