Как реализовать функцию прослушивания блокировки в отдельном потоке, пока основной продолжает работать в Python

Я модифицировал @BillPaetski ответ, чтобы использовать querySelector, добавить необязательный CSS, удалить принудительный тег H1 и сделать заголовок опционально указанным или вытащить из окна. Он также не авто-распечатывается и не подвергает внутренности, поэтому их можно отключить в функции обертки или по своему усмотрению.

Единственными двумя частными vars являются tmpWindow и tmpDoc, хотя я считаю, что доступ к названиям, css и элементу может варьироваться. Следует предположить, что все аргументы функции являются частными.

Код:
function PrintElem(elem, title, css) {
    var tmpWindow = window.open('', 'PRINT', 'height=400,width=600');
    var tmpDoc = tmpWindow.document;

    title = title || document.title;
    css = css || "";

    this.setTitle = function(newTitle) {
        title = newTitle || document.title;
    };

    this.setCSS = function(newCSS) {
        css = newCSS || "";
    };

    this.basicHtml5 = function(innerHTML) {
        return '<!doctype html><html>'+(innerHTML || "")+'</html>';
    };

    this.htmlHead = function(innerHTML) {
        return '<head>'+(innerHTML || "")+'</head>';
    };

    this.htmlTitle = function(title) {
        return '<title>'+(title || "")+'</title>';
    };

    this.styleTag = function(innerHTML) {
        return '<style>'+(innerHTML || "")+'</style>';
    };

    this.htmlBody = function(innerHTML) {
        return '<body>'+(innerHTML || "")+'</body>';
    };

    this.build = function() {
        tmpDoc.write(
            this.basicHtml5(
                this.htmlHead(
                    this.htmlTitle(title) + this.styleTag(css)
                ) + this.htmlBody(
                    document.querySelector(elem).innerHTML
                )
            )
        );
        tmpDoc.close(); // necessary for IE >= 10
    };

    this.print = function() {
        tmpWindow.focus(); // necessary for IE >= 10*/
        tmpWindow.print();
        tmpWindow.close();
    };

    this.build();
    return this;
}
Использование:
DOMPrinter = PrintElem('#app-container');
DOMPrinter.print();
1
задан ammar 1 March 2019 в 13:49
поделиться

1 ответ

Для всех людей, которые столкнутся с этой проблемой, здесь есть простое решение: ОСУЩЕСТВЛЯЕТСЯ ОБРАБОТАТЬ СИГНАЛ СИГНАЛА И НЕ ИСПОЛЬЗУЙ Метод будет продолжать работать, т.е. метод, в котором был создан поток, не будет блокироваться. Это простое решение, с которым я не сталкивался.

Таким образом, вместо использования: signal.pause() используйте это:

def start_server():
   t_server = threading.Thread(target=server.start)
   t_server.start()
   # signal.pause()
   signal.signal(signal.SIGINT, handler)

def handler(signum, frame):
   ... # do whaterver you want to do, throw an exception, close your resources etc.
0
ответ дан ammar 1 March 2019 в 13:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: