Программа на Python: почему raw_input () блокируется после обработки сигнала?Как это решить? - PullRequest
0 голосов
/ 28 февраля 2019

Я написал программу, которая записывает системный сигнал «ctr + z» и обрабатывает его функцией.Код после функции дескриптора является функцией raw_input ().Я обнаружил, что после обработки захвата сигнала подсказка ввода функции raw_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. Я пытаюсь использовать функцию os.write () write stdin, ожидаю, что функция raw_input () может читать stdin, но не удалось.

В чем проблема?Как это исправить?

...