Как использовать функцию Open With с Python?

В настоящее время я работаю со скриптом Python, который имеет следующий код. Он открывает файл с текстом JSON и определяет на его основе значение.

      browseFiles()

def browseFiles():
global fileName
fileName = filedialog.askopenfilename(title = "Select a File", filetypes = (("All Files","*.*")))

# Open the File in Read Mode
fileFile = open(fileName, "r")

# Read the file
fileContent = fileFile.read()

# Render the JSON
fileJSON = json.loads(fileContent)

# Determine the ID
myID = fileJSON["key"]

# Update the Status
windowRoot.title(myID)

... remaining code

fileFile.close()

Однако менее удобно каждый раз открывать программу, а затем переходить к ней.

В Windows есть функция «Открыть с помощью» в проводнике, где мы можем щелкнуть файл правой кнопкой мыши и открыть его с помощью таких приложений, как Word и т. Д.

Как реализовать это в скрипте Python? Стоит ли сначала подумать о создании .exe этого скрипта, и если да, то какая библиотека для этого больше всего подходит? (Учитывая, что это очень маленькая и простая утилита)

Некоторая дополнительная информация, которая, вероятно, нежелательна: я использую Tkinter для графического интерфейса.

(Кстати, если этот вопрос уже существует на StackOverFlow или на любом другом веб-сайте, прокомментируйте ссылку, а не просто помечайте ее как дублирующую. Я много пробовал искать и ничего не нашел)

С уважением, Виваан.

3 ответа

простой пример:

      import sys
try:
    #if "open with" has been used
    print(sys.argv[1])
except:
    #do nothing
    pass

пример использования:

      import sys
from tkinter import filedialog

filetypes = (('Text files', '*.txt'),('All files', '*.*'))

#if filename is not specified, ask for a file
def openfile(filename = ''):
    #print contents of file
    if filename == '':
        filename = filedialog.askopenfilename(title='Open A File',filetypes=filetypes)
    with open(filename,'r', encoding="utf-8") as file:
        read = file.read()
    print(read)



try:
    #if "open with" has been used
    openfile(filename = sys.argv[1])
except:
    #ask for a file
    openfile()

затем скомпилируйте его в exe с помощью nuitka (или любого другого инструмента, который вы используете)
и попробуйте.

или (для тестирования, без необходимости компилировать его каждый раз, когда вы вносите изменения):
создайте файл .bat

      @echo off
py program.py %*
pause

Затем каждый раз, когда вы хотите запустить его,
выopen with этот файл.

что вам нужно, это добавить новый элемент в контекстное меню правой кнопки мыши.

Вы можете взять пример кода реестра ниже, изменить путь к вашему скрипту pyC:\your_script.pyи сохраните его как что-либо, заканчивающееся расширением .reg, затем дважды щелкните, чтобы выполнить этот файл реестра.

после этого вы должны открыть с помощью my_py, когда вы щелкните правой кнопкой мыши на целевом файле

со стороны вашего скрипта py замените код filedialog наfileName = sys.argv[1]

      Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\open with my_py\command]
@="python C:\\your_script.py %1"

*** Пожалуйста, будьте осторожны с кодом реестра, так как неправильный взлом реестра может вызвать проблемы.

обратитесь к этому для ручного изменения реестра

Нашел еще один вопрос с ответами, которые мне помогли. Размещение этого для других людей, которые могут найти этот вопрос.

ответ от Роя Кая:

Мой подход заключается в использовании файла перенаправления .bat, содержащегоpython someprogram.py %1. %1 передает путь к файлу в скрипт Python, к которому можно получить доступ с помощью

      from sys import argv
argv[1]