Python shell 脚本使用 +F 选项打开更少

标签 python linux scripting less-unix

我有以下 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!")

最佳答案

您可以尝试忽略 SIGINT 信号并删除 -K less 选项:

#!/usr/bin/python
import sys
import os
import signal
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])

    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
except KeyboardInterrupt:
    pass

print("I'm still running!")

try...except 不再有用,因此您可以将其删除。

老实说,我对信号处理的内存有点模糊,我不是 100% 确定为什么会这样。显然忽略 SIGINT(由 Ctrl+C 生成)会阻止 Python 对信号进行操作,但生成的进程应该继承父进程的信号配置。可能 less 设置了自己的信号处理程序,也许这就是它起作用的原因。

关于Python shell 脚本使用 +F 选项打开更少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24884357/

相关文章:

python - 为什么Python 3.4.3使用lxml不能正确输出打印语句?

用于同时 ping 多台主机的 Linux Bash 脚本

php - apache/linux 版本之间 PHP GLOBALS 的差异

java - SIGSTOP 和 SIGTSTP 会损坏 JVM 吗?

c++ - 在邮件通知区域而不是收件箱中显示 Outlook 图标

python - 如何使用文件名、开始和结束时间的数据框创建视频剪辑?

python - 如何创建可定制的 Python 类型

python - django 日志记录为每个请求全局设置上下文?

android - 用于安装多个 Android 应用程序的 Windows 脚本

google-chrome - 如何使用 AHK 重新映射 key 以打开和关闭 Google Chrome