Arhn - архитектура программирования

tkFileDialog и pyperclip предотвращают выход скрипта

Сценарий с импортированными tkFileDialog и pyperclip не завершится. (Python2.7) Рабочие примеры, когда мой скрипт завершается, как и ожидалось:

import Tkinter, tkFileDialog
root = Tkinter.Tk()
root.withdraw()
file_path = tkFileDialog.askopenfilename()
root.destroy()

Так же как:

import pyperclip
print ('whatever')

Тем не менее, следующее предотвратит выход моего скрипта (raise SystemExit добавлено для акцента):

import Tkinter, tkFileDialog
import pyperclip
root = Tkinter.Tk()
root.withdraw()
file_path = tkFileDialog.askopenfilename()
root.destroy()
raise SystemExit

Просто импорт обоих модулей работает нормально, tkFileDialog должен быть открыт, чтобы создать ошибку. Вызов os._exit() или любого кода, вызывающего SystemExit, мягко блокирует интерпретатор или python-процесс при вызове как скрипт.
Похоже, проблема возникает, когда pyperclip загружается при открытии tkFileDialog, поскольку следующий фрагмент работает как ожидал:

import Tkinter, tkFileDialog
root = Tkinter.Tk()
root.withdraw()
file_path = tkFileDialog.askopenfilename()
root.destroy()
import pyperclip
raise SystemExit

В любом случае, однако, каждая строка кода после критической части выполняется, как и ожидалось, повышение SystemExit создаст мягкую блокировку.
Это нельзя использовать в качестве обходного пути, поскольку python не позволяет выгрузку модули.

Что я делаю не так? Любые идеи для обходного пути?


  • поэтому, когда вы вызываете диалог открытия имени файла, вы выбираете файл? 05.11.2018
  • Да. Выход из диалогового окна без выбора файла работает нормально 05.11.2018
  • Ну, root.destroy() завершит экземпляр tk, однако вам может понадобиться использовать quit(), чтобы закрыть интерпретатор. Взгляните на этот пост: разница между root.destroy () и root.quit()? 05.11.2018
  • @ Майк-СМТ Я знаю. Проблема, с которой я сталкиваюсь, заключается в том, что quit(), exit(), sys.exit(), os._exit,.... все будут создавать мягкую блокировку, когда pyperclip загружается, когда экземпляр tkFileDialog открыт. Что бы я ни делал, скрипт не выходит. 05.11.2018
  • Я нигде не вижу import os в вашем примере. Если вы еще этого не сделали, вам нужно добавить import os вверху. 05.11.2018
  • @Mike-SMT отредактировано. Извините, опустил эту часть для краткости. Опять же, не имеет значения, каким образом я пытаюсь выйти из скрипта/интерпретатора для создания программной блокировки. 05.11.2018
  • Можете ли вы объяснить, что вы подразумеваете под softlock? Как и сейчас, ваш код работает на моей стороне. 05.11.2018
  • @Mike-SMT Странно, тогда должно быть что-то с моей настройкой. Проверял на 2-х машинах. Softlock: скрипт не завершится, но выполнит любую операцию, поставленную в очередь, прежде чем rasing SystemExit, как и ожидалось, процесс python перестанет отвечать на запросы и должен быть принудительно закрыт. 05.11.2018
  • Я тестировал Eclipse IDE, Python IDLE и командную строку, и все выходило, как и ожидалось. Я тестировал оба с os._exit(0) и SystemExit. 05.11.2018
  • @Mike-SMT Только что снова проверил в virtualenv с установленными только pyperclip, tkinter и зависимостями, просто чтобы убедиться. Та же проблема. У меня Windows 10, если это имеет значение. К сожалению, у меня нет идей, как отслеживать это дальше, так как никакой ошибки не возникает. Спасибо за вашу помощь! 05.11.2018
  • Ну, я знаю, что у некоторых virtualenv есть проблемы, которые необходимо решить для python. Tkinter устанавливается по умолчанию со всеми известными мне дистрибутивами Windows, поэтому не пытайтесь установить их снова. Однако вы можете попробовать переустановить pyperclip или, возможно, другую версию pyperclip. 05.11.2018
  • @Mike-SMT Да, Tkinter установлен по умолчанию, поэтому мне приходится пробовать разные версии pyperclip. Мне нужно работать с virtualenv для других не связанных с совместимостью проблем. На данный момент я вообще не использую pyperclip, это полезно, но не слишком сложно реализовать для себя. В очередной раз благодарим за помощь. 05.11.2018
  • @ Êrelyn, если вы это понимаете, обязательно вернитесь и ответьте на свой вопрос. Хорошо бы знать, что делать в такой ситуации. 05.11.2018
  • Я тестирую это в Windows 10 с Pyperclip 1.7.0 (последней) на Python 2.7.15, и ваш код, кажется, работает для меня. 27.11.2018

Ответы:


1

Не настоящее решение, но лучшее, что я мог придумать: переход с python 2.7 на python 3.7 (и, следовательно, с Tkinter 8.5 на 8.6) помогает мне.

Конечно, это имеет много других последствий, которые я не мог проверить.

Кстати, поскольку другие не смогли воспроизвести проблему: у меня была возможность запустить свой фрагмент кода на еще одной машине с Windows 10 — он работал безупречно с той же настройкой. Таким образом, проблема определенно имеет какое-то отношение к базовой системе, а не к pyperclip или самому Tkinter.

02.12.2018
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..