IF 1は本当にデータが、私は取り付けをお勧めしたいことを希望したGDBの Pythonインタプリタにデバッガを、一時的にタスクを停止し、呼び出しfsync(1)
(標準出力をそれから)、切り離し(プロセスの再開を)し、出力ファイル閲覧行きます。
/proc/$(pidof python)/fd
有効なファイル記述子を確認してください。$(pidof x)
' x
' という名前のプロセスのPIDを返します。
# 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
このメソッドを使用して、作業ディレクトリを変更し、その場で設定を調整しました...多くのこと。残念fsync
ながら、実行中のプログラムで定義されている関数のみを呼び出すことができますが、うまく機能します。
(gdbコマンド ' info functions
'は、使用可能なすべての機能をリストします。ただし、注意してください。プロセスでLIVEを操作しています。)
また、プロセスのバッファに隠れているものを確認できるコマンドpeekfd
(psmisc
Debian Jessieなどのパッケージにあります)もあります。繰り返し/proc/$(pidof python)/fd
ますが、peekfdに引数として与える有効なファイル記述子が表示されます。
-u
pythonを覚えていない場合は、コマンドの前にstdbuf
(in coreutils
、既にインストールされている)を付けて、stdin / stdout / stderrを必要に応じてアンバッファー、ラインバッファー、またはブロックバッファーに設定できます。
stdbuf -i 0 -o 0 -e 0 python myscript.py > unbuffered.output
もちろん、man pages
お友達ですよね!おそらくエイリアスもここで役に立つかもしれません。
alias python='python -u'
これで、Pythonは常に-u
すべてのコマンドラインの努力に使用します!