Pythonshell脚本用+ F选项打开较less

我有以下的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 

如果使用我当前的脚本没有一个好的解决scheme,也许有人可以给我一个更合适的解决scheme,语言并不重要。

干杯,

菲利普

解:

 #!/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设置自己的信号处理程序,也许这就是为什么它的工作原理。