使用Python脚本打开特定文件类型?

13

我怎样才能让一个Python脚本成为特定文件类型(例如*.foo)的默认应用程序呢?也就是说,当我在Finder / Explorer中双击该文件时,我想要该文件在Python脚本中打开。

在Win和/或OS X中是否可以实现这一点?该应用程序是一个PySide应用程序(如果有关系的话)。


调用Java存根是否适合您?https://dev59.com/t3RB5IYBdhLWcg3wr48V否则,如果您想要便携式解决方案,我相当确定您没有机会。 - Kijewski
从那个问题中,我无法找到任何打开文件的方法。.open 方法似乎只能在默认应用程序中打开文件。即使你可以,它也不会比我的答案更好,因为你需要一个 Java 应用程序来打开 Python 脚本。 - potato
5个回答

3

Mac OS X

Mac OS X 上,您可以使用 Automator 创建一个应用程序,调用您的 Python 应用程序并将输入文件路径作为字符串参数传递。在应用程序工作流向导中,添加操作 "运行 Shell 脚本",选择 传递输入:作为参数,并在文本框中添加:

python /path/to/my/app/myapp.py "$@"
"$@" 将输入文件中的任何参数作为字符串传递。只要您的脚本将输入(sys.argv)设置为字符串列表(第一个是Python应用程序路径),那么它就可以工作。
当您保存该Automator工作流时,它将被OS X视为任何其他应用程序,并且您可以将该应用程序设置为类型为“ *.foo”的文件的默认值。要将“*.foo”与该应用程序关联,请右键单击.foo文件,选择“获取信息(Get Info)”, “打开方式: 其他…”,选择在Automator中创建的应用程序,然后单击“全部更改(Change All…)”按钮。

Windows

在Windows中,可能需要采用类似但不那么复杂的方法。您可以使用以下内容创建批处理文件(.bat):
python C:\path\to\my\app\myapp.py %*

%*会扩展到所有参数。

只要你能将文件扩展名与批处理文件相关联,那么就可以这样做,而这就是你的解决方案。然而,我没有尝试过这个Windows解决方案,所以需要持怀疑态度。另一方面,我测试过Mac解决方案。


0
举个例子,这里是我为以下问题编写的通用解决方案: 1)打开已复制到 Linux 系统的 Windows 桌面链接(* .URL)。 或者 2)打开已复制到 Windows 系统的 Linux .Desktop 链接。
下面是处理两种情况的 Python 脚本:
# UseDesktopLink.py
import sys
import webbrowser
script, filename = sys.argv
file_object = open(filename,'r')
for line in file_object:
    if line[0:4]=="URL=":
        url=line[4:]
        webbrowser.open_new(url)
file_object.close()

在Windows上,使用Scott H的方法(通过批处理文件)来处理关联。
在Linux上,右键单击Windows URL文件。选择属性,然后选择打开方式。点击“添加”以添加新应用程序。然后在“添加应用程序”窗口底部,点击“使用自定义命令”。然后浏览到UseDesktopLink.py文件并单击“打开”。但是在您单击“添加”之前,在“使用自定义命令”下面的文本框中输入“python”(不带引号)文件名之前。然后单击添加和关闭。
希望这有所帮助。

-1
  1. 查找任何类型为foo的文件
  2. 右键单击->获取信息或单击文件图标,然后单击获取信息或单击文件并按下Command+I
  3. 在显示的打开方式窗格中,选择到Python二进制文件的路径
  4. 一旦选择完成,您可以单击全部更改按钮
  5. 它会要求确认,只需选择继续

有没有办法选择一个 *.py 文件而不是一个 *.app(来自 py2app 或其他什么东西)? - c00kiemonster
对于一个 *.py 文件,您需要按照步骤 1 中的 foo 改为 .py - Lelouch Lamperouge
2
这变得非常混乱。OP有一个Python脚本,比如myapp.py,并希望使用它自动打开以.foo结尾的文件,例如myfile.foo或任何其他文件。使用此答案中的说明,但在第3步中,不要将您的.foo文件与Python二进制文件相关联,而是将其与您的Python应用程序的.py文件相关联,例如myapp.py。 - Simon Hibbs
@SimonHibbs 当我到达第三步时,无法将任意文件类型与.py文件关联,因为OS X不认为它是一个应用程序。您可以在Finder中导航到脚本,但它是灰色的,因为它不是一个应用程序。我做错了什么吗? - Adam Wuerl

-1
我在寻找答案时发现了这个旧问题,我想分享我的解决方案。我使用了一个简单的C程序将参数传递给Python脚本,使得Python脚本可以保持脚本状态而不需要编译就能正常工作。以下是我的C程序:
int main(int argc, char *argv[]){
    char cmd[0xFF];
    // For me, argv[1] is the location of the file that is being opened.  I'm not sure if this is different on other OSes
    snprintf(cmd,sizeof cmd,"python YOUR_PYTHON_SCRIPT_HERE.py -a %s", argv[1]);
    system(cmd);
    return 0;
}

然后我编译了C程序,并将其设置为文件扩展名的默认应用程序。
然后,在Python脚本YOUR_PYTHON_SCRIPT_HERE.py中,我像这样接收参数:

import sys
assert len(sys.argv) > 2 # Breaks if you call the script without the arguments
theFile = " ".join(sys.argv[2:]) # What the c program gives us 
print(theFile) # Print it out to prove that it works

theFile将包含正在打开的文件的位置
通过使用以下方法获取文件内容:

with open(theFile,"r") as f:
    fileContents = f.read()

-4

在Windows上:

  1. 右键单击文件(我使用了一个.docx文件作为示例)
  2. 选择打开方式...
  3. 从应用程序列表中选择python
  4. 可选:选择始终使用所选程序打开此类文件

注意:这将在Python shell的上下文中运行.docx文件的内容。一旦完成对文件内容的评估,它将立即关闭。如果您想在文字处理器中编辑文件,也许您应该下载notepad++,并将其作为默认应用程序选择。


5
OP希望某个特定的文件类型能够使用“他自己的Python脚本”打开,而不是使用Python本身。 - ekhumoro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接