如何双击直接用python打开自定义文件?

Posted

技术标签:

【中文标题】如何双击直接用python打开自定义文件?【英文标题】:How can I directly open a custom file with python on a double click? 【发布时间】:2014-03-17 13:16:06 【问题描述】:

我在 Windows 机器上编程,我有一个应用程序可以读取用户选择的文件。是否可以让他们在双击时直接打开文件。当程序使用 cxfreeze “编译”为 .exe 时,这需要工作。

我真正要问的是: 有没有办法让用户双击自定义文件(.lpd),当他们这样做时,windows 会启动程序(编译的 cxfreeze .exe)并将文件路径作为参数传递给它。

【问题讨论】:

我在 cx_Freeze GitHub 存储库中打开了一个请求此问题的问题:Documentation on how to make a file association in MSI for Windows · Issue #274 · anthony-tuininga/cx_Freeze 【参考方案1】:

Windows 将文件与特定程序关联的唯一方法是通过它们的扩展名,所以这仅在您的文件具有唯一扩展名时才有效(看起来可能是这样)。因此,您的用户需要在他们的机器上设置关联,这取决于 Windows 的版本。例如,在 Windows 7 中,它可能会通过Control Panel\All Control Panel Items\Default Programs\Set Associations

您可以在他们的系统上自动设置此关联(可能通过编辑 Windows 注册表),但这通常会在安装过程中完成,您应该先征得用户的许可。

【讨论】:

是的,但是当我们设置 assoc 并且用户双击时,我如何获取文件路径 我相信它是作为第一个(也是唯一一个)参数传递给您的程序的。所以在python中,它可能是sys.args[1]【参考方案2】:

我使用 PyInstaller 生成 exe。 这是一个小例子:

import sys

class Test():
    def __init__(self, path=None):
        super().__init__()
        self.path = path

    def start(self):
        if self.path == None:
            pass
        else:
            print(self.path)


if __name__ == '__main__':
    if len(sys.argv) > 1 :
        mytest = Test(sys.argv[1])
    else:
        mytest = Test()

    mytest.start()

【讨论】:

以上是关于如何双击直接用python打开自定义文件?的主要内容,如果未能解决你的问题,请参考以下文章

vscode如何配置debug,python正则表达式如何匹配括号,关于python如何导入自定义模块

wps可不可以设置 自定义的固定模板?

C# 自定义VS安装项目的安装路径(可以通过程序调用DefaultLocation属性吗)

双击自定义视图打开 2 个活动

如何在curl中设置自定义的HTTP头

c# 为自定义控件添加鼠标双击事件