EĞER biri gerçekten bu verileri isteyen, ben takılarak öneririm gdb çağırarak, piton tercüman hata ayıklayıcı anlık olarak görev durdurma fsync(1)( stdout'u (sürecinin devamının olarak),) durumda ayırma ve çıkış dosyası incelemek gidin.
Bak /proc/$(pidof python)/fdgeçerli bir dosya tanımlayıcıları görmek için. $(pidof x)' x' adlı işlemin PID'sini döndürür .
# your python script is running merrily over there.... with some PID you've determined.
#
# load gdb
gdb
#
# attach to python interpreter (use the number returned by $(pidof python))
attach 1234
#
# force a sync within the program's world (1 = stdout, which is redirected in your example)
call fsync(1)
#
# the call SHOULD have returned 0x0, sync successful. If you get 0xffffffff (-1), perhaps that wasn't stdout. 0=stdin, 1=stdout, 2=stderr
#
# remove our claws from poor python
detach
#
# we're done!
quit
Ben çalışma dir's değiştirmek için bu yöntemi kullandım, anında ayarları tweak ... birçok şey. Ne yazık ki, sadece çalışan programda tanımlanan işlevleri çağırabilirsiniz, fsyncancak güzel çalışır.
(gdb komutu ' info functions' kullanılabilir tüm işlevleri listeler. Yine de dikkatli olun. LIVE'ı bir işlemde çalıştırıyorsunuz.)
Ayrıca, bir işlemin arabelleklerinde nelerin gizlendiğini görmenizi sağlayan komut peekfd( psmiscDebian Jessie ve diğerleri üzerinde pakette bulunur) vardır. Yine, /proc/$(pidof python)/fdpeekfd'ye argüman olarak vermek için geçerli dosya tanımlayıcılarını gösterecektir.
-uPython'u hatırlamıyorsanız , stdin / stdout / stderr öğesini arabelleğe alınmamış, satır arabelleğe alınmış veya istendiği gibi arabelleğe alınmış olarak ayarlamak için her zaman stdbuf( coreutilsönceden yüklenmiş olarak) ile bir komutun önüne ön ek ekleyebilirsiniz :
stdbuf -i 0 -o 0 -e 0 python myscript.py > unbuffered.output
Tabii ki man pagesarkadaşlarınız, hey! belki de bir takma ad burada yararlı olabilir.
alias python='python -u'
Şimdi python'unuz her zaman -utüm komut satırı çabalarınız için kullanır !