doza_and
Поэтому конкретно у меня ассоциирован docx на Libreoffice.
Видел, как в git'е сделано? Когда нужно сравнить два файла, используется difftool - абстрактный сравниватель.
http://schacon.github.io/git/git-difftool.htmlCONFIG VARIABLES
git difftool falls back to git mergetool config variables when the difftool equivalents have not been defined.
diff.tool
The default diff tool to use.
diff.guitool
The default diff tool to use when --gui is specified.
То есть мы имеем difftool по умолчанию, но используется он через абстрактный difftool, к которому что-то прикручено. По умолчанию прикручено что-то и в настройках можно указать, которые перекроют умолчания.
Так и здесь надо сделать ему: определить абстрактный текстовый редактор, абстрактный документный редактор, абстрактный html-страничный просмотрщик. А потом сделать для них настройки, где можно записать, что запускает каждый из абстрактных редакторов или просмотрщиков.
У меня так в загрузчике файлов из Интернета сделано: качается всё через абстрактный загрузчик, а в абстрактном загрузчике записан Wget, но при этом, если я заменю его на Curl, например, вся программа этого даже не заметит, потому что все загрузки она просит выполнить абстрактный загрузчик через его методы.
И как понять тогда, закрыт у него файл или открыт? Очень просто - надо ему сделать обёртку, которая создаёт признак открытого файла и удаляет этот признак после закрытия приложения. И всё это происходит за пределами питона на уровне операционной системы. Так что из питона внутри системы ничего не надо проверять, достаточно проверить наличие признака (временного файла, например).