强制终止SSH服务器上的Python脚本时,如何让其输出写入txt文件?
解决方法:先刷缓存再终止进程
这问题我碰到过好几次了,核心原因是Python的输出缓冲机制在后台运行时的特殊表现——默认情况下,当输出目标不是交互式终端(比如你的output.txt文件),Python会启用块缓冲,不会实时把内容写到文件里,所以你才会看到output.txt一直是0字节。
下面是具体的解决步骤:
1. 定位脚本的进程ID
首先得找到正在运行的python_script.py进程,用这两个命令都可以:
# 查看详细进程信息,注意过滤掉grep本身的进程 ps aux | grep python_script.py | grep -v grep # 或者更简洁的方式直接获取PID pgrep -f python_script.py
输出里的数字就是进程ID(PID),记下来备用。
2. 强制刷新输出缓冲区
给这个进程发送SIGUSR1信号——Python会专门响应这个信号,立刻把所有缓存的输出写入到目标文件:
kill -USR1 <你的进程PID>
等个1-2秒,你可以用ls -lh output.txt或者cat output.txt检查一下,此时文件应该已经有内容了。
3. 终止进程
确认输出已经写入后,就可以正常终止进程了:
kill <你的进程PID>
如果进程没响应这个温和的终止信号,再用强制终止的信号:
kill -9 <你的进程PID>
下次避免这个问题的小技巧
如果你以后不想再碰到这种情况,运行脚本时加上-u参数,直接禁用Python的输出缓冲,这样输出会实时写入文件:
nohup python3 -u python_script.py >> output.txt &
内容的提问来源于stack exchange,提问作者Samuel
相关产品推荐
相关产品推荐

