Сценарий Python выводит вывод os.system перед печатью

У меня есть скрипт python test.py:

print "first" import os os.system("echo second") 

В командной строке linux я выполняю

 python test.py 

который возвращает:

 first second 

Затем я выполняю

 python test.py > test.out; cat test.out 

который возвращается

 second first 

Что касается перенаправления вывода, то вызов os.system вызывается перед оператором печати?

Когда вы выводите на канал, Python буферизует ваш вывод, который записывается в sys.stdout и выводит его после флеша или после его переполнения или после закрытия (когда программа выходит). Пока он будет буферизовать вызовы печати, вывод системных вызовов непосредственно в stdout и их вывод не будут буферизированы. Вот почему вы видите такой приоритет. Чтобы этого избежать, используйте python -u :

 python -u test.py > test.out; cat test.out 

Подробнее см. Здесь .

EDIT : объяснение того, когда буфер будет сброшен.

Другой способ предотвратить буферизацию os – очистить вывод после первой печати:

 #!/usr/bin/env python import sys print "first" sys.stdout.flush() import os os.system("echo second") 

Когда вывод скрипта python является tty, его вывод буферизируется по строке. Когда выход является обычным файлом, вывод блокируется блоком.