通过 windows 中的右键单击 'Open With' 上下文菜单将文件传递到 Python,然后在另一个程序中打开

Pass a file to Python via the Right-Click 'Open With' context menu in windows, to then open in another program

我使用了一个软件,当您关闭时,它会保存您当前的配置,但是,下次我通过单击与其关联的文件打开该软件时,它会尝试 运行 该文件通过相同的配置,我不想要。因此,我创建了一个 python 脚本来首先打开该程序的应用程序数据,将配置重置为默认值,然后再次打开该程序。

如果我只是尝试在没有文件的情况下加载程序,这工作正常,但我希望能够单击与该程序关联的文件(通常我只需双击该文件即可打开它程序),然后使用windows中的'open with'函数来select我的脚本,然后在我的脚本清除了最后的配置后在程序中打开文件。 目前,如果我这样做,它会清除配置并打开程序,但不会加载任何文件。

本质上我是在问如何将文件传递给 python,然后让 python 将该文件传递给第三方应用程序。

我正在使用 'os.startfile('link to .exe') 函数打开程序,但是如何通过 argument/string 将文件路径作为 python单击文件并使用我的脚本打开它?

path = 'path/to/file/selected'  # passed to python from selecting the file in windows explorer before starting script

# execute some code

os.startfile('path')

我在 python 方面有点初学者,所以任何帮助将不胜感激!

在 windows 10

上使用 python 3.6

您可以使用 sys.argv 访问传递给脚本的命令行参数。只要您想将这些参数传递给某些第三方应用程序(这是一个可执行二进制文件),您就应该使用 subprocess 模块,因为 os.startfile 意味着启动一个文件及其关联的应用程序。

import sys
import subprocess

def main():
    if len(sys.argv) == 1:
        path = sys.argv[0]
        subprocess.run(['/path/to/my.exe', path])
    else:
        print('Usage myscript.py <path>')

if __name__ == "__main__":
    main()

如果我正确理解你的问题,可以通过以下方式完成,依赖于 subprocess 模块:

subprocess.Popen(["/path/to/application", "/path/to/file/to/open"])

有关详细信息,请参阅 documentation