windows 如何在Python中使用“打开方式”功能?

rsaldnfx  于 2022-11-26  发布在  Windows
关注(0)|答案(3)|浏览(200)

我目前正在使用一个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作为GUI。
(By顺便说一句,如果这个问题已经存在于StackOverFlow或任何其他网站上,那么请评论链接,而不是只是标记为重复。我试着搜索了很多,但没有找到任何东西)
祝你好运Vivaan

j2cgzkjk

j2cgzkjk1#

简单示例:

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()

然后用nuitka(或任何你使用工具)将其编译成exe,
试试看。
或者(用于测试,而不必在每次进行更改时进行编译):
创建.bat文件

@echo off
py program.py %*
pause

然后每次你想运行它的时候
你看那个文件

sxissh06

sxissh062#

您所需要是在右键单击上下文菜单中添加新项
您可以使用下面的示例注册表代码,修改py脚本C:\your_script.py的路径,并将其保存为任何以.reg扩展名结尾的文件,然后双击执行该注册表文件。
之后,你应该看到打开与my_py当你右键点击目标文件
从py脚本端,用fileName = sys.argv[1]替换filedialog代码

Windows Registry Editor Version 5.00

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

***请谨慎使用注册表代码,因为错误的注册表黑客可能会带来麻烦

请参阅this以手动修改注册表

lrl1mhuk

lrl1mhuk3#

找到了another question,其中的答案对我很有帮助。将此文章发布给可能找到此问题的其他人。
蔡磊回答:
我的方法是使用一个包含python someprogram.py %1的redirect .bat文件。% 1将文件路径传递到python脚本中,可以使用

from sys import argv
argv[1]

相关问题