Python程序:为什么原始输入()在信号处理后被阻塞?如何解决?

2024-10-01 02:27:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了一个程序,捕捉系统信号“ctr+z”,并通过一个函数进行处理。handle函数后面的代码是raw\u input()函数。我发现在信号捕获处理之后,raw\u input()函数的输入提示不会出现,直到我按下“回车”键。有什么问题?你知道吗

我的代码:

import signal
import re
import os
import readline
import shareApi

def handler(signum, frame): # ctr + z signal is 20
    if signum == 20:
        path = '/usr/local/tmpConfigFile/signal.data'
        shareApi.writeStringToFile(path, str(signum))

def main():
    signal.signal(signal.SIGINT, signal.SIG_IGN)
    signal.signal(signal.SIGTSTP, handler)
    prompt = "$"


    while True:
        path = '/usr/local/vSw/tmpConfigFile/signal.data'
        if os.path.exists(path):
            signum = vSwRouterShareApi.readFileToString(path)
            if signum == "20":
               prompt = "#"
            os.system("/bin/rm -f " + path)
        os.write(0,"^Z\n")
    try:    
        cmdstr = raw_input(promot)        # label
        print cmdstr
    except:
        print ""
        continue

"""
  1. 如果不导入readline模块,则程序正常
  2. 程序被封锁在标签上,它继续工作,直到用手输入“回车”键
  3. 我试着用操作系统写入()函数write stdin,expect raw_input()函数可以读取stdin,但失败。你知道吗

有什么问题?如何修复?你知道吗


Tags: path函数代码import程序inputreadlineraw