Как использовать функцию 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]