Давайте посмотрим на лес сначала, прежде чем смотреть на деревья.
Здесь есть много информативных ответов с большими подробностями, я не буду повторять ни одного из них. Ключ к программированию в JavaScript имеет сначала правильную ментальную модель общего исполнения.
Хорошие новости заключается в том, что, если вы хорошо понимаете этот момент, вам никогда не придется беспокоиться о гоночных условиях. Прежде всего вы должны понимать, как вы хотите упорядочить свой код как по существу ответ на разные дискретные события, и как вы хотите объединить их в логическую последовательность. Вы можете использовать обещания или новые асинхронные / ожидающие более высокие уровни в качестве инструментов для этой цели, или вы можете откатывать свои собственные.
Но вы не должны использовать какие-либо тактические инструменты для решения проблемы, пока вам не понравится актуальная проблемная область. Нарисуйте карту этих зависимостей, чтобы знать, что нужно запускать, когда. Попытка ad-hoc подхода ко всем этим обратным вызовам просто не поможет вам.
Это не вопрос программирования, но вам нужно выяснить, как получить исполняемый файл Python в раздел реестра, который открывает ваш файл данных.
Например, я создал небольшой скрипт Python под названием opener.py
, который выглядит так:
import sys
print(sys.argv)
input()
Затем я создал testfile.foo
и использовал кнопку «change» в диалоговом окне свойств этого файла, чтобы выбрать opener.py
. (Вы можете сделать это, если вы нажмете «Обзор» и измените фильтр файлов «Открыть с диалогового окна» на «Все файлы».)
Конечно, это не сработало (как вы заметили). Поэтому я открыл regedit
и искал opener.py
и нашел его в следующем разделе реестра:
HKEY_CURRENT_USER\Software\Classes\Applications\opener.py\shell\open\command
Значением по умолчанию этого ключа было "C:\opener.py" %1
. Я изменил его на python "C:\opener.py" %1
. Это сработало!
Короче говоря, для правильной работы вам нужно внести изменения в реестр. Фактически настройка ассоциации файлов сложнее, чем просто редактирование одного ключа (вы также должны указать, что .foo
связан с opener.py
).
Альтернативный подход заключается в том, чтобы повернуть ваш скрипт Python в автономный исполняемый файл, используя один из нескольких инструментов, доступных для этой цели, или напишите небольшой исполняемый файл на C, который запускает скрипт.