Мне интересно, как вызывать внешнюю программу таким образом, чтобы пользователь мог продолжать взаимодействовать с пользовательским интерфейсом моей программы (созданным с использованием tkinter, если это важно), пока работает программа Python. Программа ожидает, когда пользователь выберет файлы для копирования, поэтому он все еще должен иметь возможность выбирать и копировать файлы во время работы внешней программы. Внешняя программа - Adobe Flash Player.
Возможно, некоторая трудность связана с тем, что у меня есть класс "рабочий" с резьбой? Он обновляет индикатор выполнения во время копирования. Я хочу, чтобы индикаторы выполнения обновлялись, даже если Flash Player открыт.
Я попробовал модуль subprocess
. Программа запускается, однако не позволяет пользователю использовать пользовательский интерфейс до тех пор, пока Flash Player не будет закрыт. Кроме того, копирование по-прежнему происходит в фоновом режиме, просто индикатор выполнения не обновляется, пока не закроется Flash Player.
def run_clip():
flash_filepath = "C:\\path\\to\\file.exe"
# halts UI until flash player is closed...
subprocess.call([flash_filepath])
Далее я попытался использовать модуль concurrent.futures
(я все равно использовал Python 3). Поскольку я до сих пор использую subprocess
для вызова приложения, неудивительно, что этот код ведет себя точно так же, как в приведенном выше примере.
def run_clip():
with futures.ProcessPoolExecutor() as executor:
flash_filepath = "C:\\path\\to\\file.exe"
executor.submit(subprocess.call(animate_filepath))
Проблема заключается в использовании subprocess
? Если так, есть ли лучший способ вызвать внешнюю программу? Заранее спасибо.