如果确实需要数据,我建议将gdb调试器附加到python解释器,暂时停止任务,调用fsync(1)
(stdout),从中分离(恢复过程)并仔细阅读输出文件。
查看/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
我已经使用这种方法来更改工作目录,即时调整设置...很多事情。las,您只能调用正在运行的程序中定义的函数,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
用于所有命令行工作!