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

时间:2012-01-01 14:45:50

标签: python default file-association

如何使Python脚本成为特定文件类型(例如* .foo)的默认应用程序?同样,当我在Finder / Explorer中双击该文件时,我希望在Python脚本中打开该文件。

这可以在Win和/或OS X中执行吗?如果重要,该应用程序是PySide应用程序。

5 个答案:

答案 0 :(得分:3)

Mac OS X

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

python /path/to/my/app/myapp.py "$@"

"$@"将输入中的任何参数(也称为选定文件)作为字符串传递。只要您的脚本设置为处理输入(sys.argv)作为字符串列表(第一个是python应用程序路径),那么它将起作用。

当您保存Automator工作流程时,它会被OS X视为与任何其他应用程序一样,您可以将该应用程序设置为" *。foo"类型的文件的默认值。联想" * .foo"使用该应用,右键单击.foo文件,Get InfoOpen with: Other...,选择您在Automator中创建的应用,然后点击Change All...按钮。

类似但希望参与度较低的方法可能适用于Windows。您可以创建一个批处理文件(.bat),其中包含以下内容:

python C:\path\to\my\app\myapp.py %*

%*扩展到所有参数。

只要您可以将文件扩展名与该批处理文件相关联,那么您就可以这样做,这就是您的解决方案。但是,我还没有尝试过这种Windows解决方案,所以请耐心等待。另一方面,我已经测试了Mac解决方案。

答案 1 :(得分: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的方法(通过bat文件)来处理关联。

在Linux上,右键单击Windows URL文件。选择属性,然后打开方式。单击“添加”以添加新应用程序。然后在“添加应用程序”窗口的底部,单击“使用自定义命令”。然后浏览到UseDesktopLink.py文件并单击“打开”。但在单击“添加”之前,在“使用自定义命令”下面的文本框中,将“python”放在文件名之前(不带引号)。然后单击“添加并关闭”。

希望有所帮助。

答案 2 :(得分:-1)

  1. 查找 foo
  2. 类型的任何文件
  3. 右键单击 - > Get Info或单击文件图标,然后单击获取信息或单击该文件并按命令 + I
  4. 在显示的Open With窗格中,选择python二进制文件的路径
  5. 选择后,您可以点击change All按钮
  6. 它会要求确认,只需说continue

答案 3 :(得分:-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 :(得分:-4)

在Windows上:

  1. 右键单击该文件(我在此示例中使用了.docx文件)
  2. 选择Open with...
  3. 从应用程序列表中,选择python
  4. 可选:选择Always use the selected program to open this kind of file
  5. 注意:这将在python shell的上下文中运行 .docx文件的内容。一旦完成评估文件的内容,它将立即关闭。如果您想在文字处理器中编辑文件,也许您应该下载notepad++,并选择该应用程序作为默认值。