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)/fd
geç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, fsync
ancak 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
( psmisc
Debian Jessie ve diğerleri üzerinde pakette bulunur) vardır. Yine, /proc/$(pidof python)/fd
peekfd'ye argüman olarak vermek için geçerli dosya tanımlayıcılarını gösterecektir.
-u
Python'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 pages
arkadaşlarınız, hey! belki de bir takma ad burada yararlı olabilir.
alias python='python -u'
Şimdi python'unuz her zaman -u
tüm komut satırı çabalarınız için kullanır !