【发布时间】:2014-09-13 02:17:09
【问题描述】:
我有以下 Python 脚本,似乎都可以按照我的意愿工作,除了以下内容:
- less 使用选项 -F 打开,这将像 Tail 一样跟随文件。
- 检查(移动)用户必须按 ctrl + c 发送中断的文件。
- 当发送 ctrl +c(中断)时,这将被发送到 python 脚本,这将终止 less 进程。
有没有办法可以在 less 窗口中使用 ctrl +c 并且在执行此操作时不终止脚本?
#!/usr/bin/python
import sys
import os
import subprocess as sp
try:
if(len(sys.argv) < 2):
print "Choose an EngineID!"
engineID = sys.argv[1]
logdir='/data/work/silverlocal-%s/log' % engineID
logfiles = sorted([ f for f in os.listdir(logdir) if f.startswith('log-%s' % engineID)])
lastlog = (logdir + "/" + logfiles[-1])
os.spawnlpe(os.P_WAIT, 'less', 'less', '+F', '-K', (lastlog), os.environ)
except KeyboardInterrupt:
pass
如果使用我当前的脚本没有一个很好的解决方案,也许有人可以建议我一个更合适的解决方案,语言并不重要。
干杯,
菲利普
解决方案:
#!/usr/bin/python
import sys
import os
import subprocess as sp
import signal
if(len(sys.argv) < 2):
print "Choose an EngineID!"
engineID = sys.argv[1]
logdir='/data/awork/silverlocal-%s/log' % engineID
logfiles = sorted([ f for f in os.listdir(logdir) if f.startswith('log-%s' % engineID)])
lastlog = (logdir + "/" + logfiles[-1])
old_action = signal.signal(signal.SIGINT, signal.SIG_IGN)
os.spawnlpe(os.P_WAIT, 'less', 'less', '+F', (lastlog), os.environ)
signal.signal(signal.SIGINT, old_action) # restore old signal disposition
print("I'm still running!")
【问题讨论】:
-
在新的选项卡/窗口中打开它,重点是运行 python 脚本的位置
-
您可能应该使用
subprocess而不是os来启动进程。它使诸如杀死进程之类的事情变得更加容易 -
您好,我其实并不想杀死进程,我想将中断信号发送给less,而不是Python脚本
-
Padraic Cunningham,您的意思是打开一个新的终端选项卡吗?这不是一个真正的选择,因为用户也将使用 Putty 启动此脚本,还是我误解了您的评论?
标签: python linux scripting less-unix