【问题标题】:How do I grab the console output (and only output) of an other program's application?如何获取其他程序应用程序的控制台输出(并且仅输出)?
【发布时间】:2024-01-23 19:01:01
【问题描述】:

我正在编写一个 python 代码,它将作为 Raspberry pi 中的守护进程工作。然而,我写这篇文章的人希望看到它在运行时得到的原始输出,而不仅仅是我的日志文件。

我的第一个想法是通过 Screen 程序使用 bash 脚本,但它有一些我无法拥有的功能。主要是通过Screen程序杀死程序的能力。

有没有办法我可以编写一个程序(最好是 python)或 bash 脚本,它能够读取另一个正在运行的程序的输出,但不向它发送任何内容?

谢谢。

【问题讨论】:

    标签: python bash console output


    【解决方案1】:

    最简单的就是 bash 命令

    tail -f my_logfile.txt
    

    这假设您已经登录到一个文件...

    如果你想窥探另一个进程的标准输出流,你可以使用 strace(也是 bash)

    export PID=$(pgrep my_program)
    strace -p$PID -s9999 -e write
    

    【讨论】:

    • 除非 python 的打印命令不进入标准输出,否则我会说它附加到我的进程,但在它说附加进程后没有显示任何内容。
    • 你在同一个终端运行吗?您可能还想检查 /var/log/syslog 的输出,因为它可能会被重定向到那里
    • 你是如何启动守护进程的?
    • 它是我写的一个 python 程序,它不会写入 /var/log/syslog/ 它还没有完全作为一个守护进程工作。现在程序在运行命令“python filename.py [arguments]”时被调用
    • 而不是以python filename.py > /var/log/prog_output.txt 2>&1 启动它,然后只需使用tail -f /var/log/prog_output.txt
    【解决方案2】:

    您可以通过调用获得标准输出流

    cat /proc/<pid>/fd/1
    

    【讨论】:

      最近更新 更多