tkFileDialog и pyperclip предотвращают выход скрипта - PullRequest
0 голосов
/ 04 ноября 2018

Скрипт с импортированными 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 не позволяет выгружать модули.

Что я делаю не так? Есть идеи для обхода?

1 Ответ

0 голосов
/ 02 декабря 2018

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

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

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

...