2012-01-01 86 views
9

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

这是可能在Win和/或OS X中完成的吗?该应用程序是一个PySide应用程序,如果这很重要。

+0

将调用你一个Java存根的工作? HTTP://计算器。com/questions/550329 /如何使用默认关联程序打开文件否则,如果您需要便携式解决方案,我相当确定您运气不佳。 – kay 2014-10-19 20:11:46

+0

从这个问题,我无法找到一种方式来打开任何应用程序的文件。 '.open'方法似乎只在默认应用程序中打开一个文件。即使你可以,它也不会比我的答案更好的解决方案,因为你需要一个Java应用程序来打开python脚本。 – potato 2014-10-25 22:46:30

回答

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

这是哪个操作系统? – Chris 2012-01-01 19:54:42

+0

Chris,Mac OS X. – 2012-01-01 22:39:36

+0

有没有办法选择* .py文件而不是* .app(来自py2app或其他?)? – c00kiemonster 2012-01-02 13:45:14

-4

在Windows上:

  1. 右键单击该文件(我用了.docx文件,在这个例子中)
  2. 选择Open with...
  3. 从应用程序列表中选择python
  4. 可选:选择Always use the selected program to open this kind of file

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

+4

OP希望使用_his自己的python script_打开特定的文件类型,而不是使用python本身。 – ekhumoro 2012-01-01 20:39:57

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

的Mac OS X

Mac OS X您可以使用Automator创建一个应用程序,该应用程序调用您的python应用程序并传递输入文件pat h作为字符串参数。在应用程序的工作流程向导添加动作“运行shell脚本”,选择Pass input:作为as arguments,并在文本框中添加:

python /path/to/my/app/myapp.py "[email protected]" 

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

当您保存的Automator工作流,它是由OS X像任何其他应用程序处理,并可以设置应用程序作为默认的文件类型“* .foo”此时。联想到“* .foo”此时已经与该应用程序,右键单击包含.foo文件,Get InfoOpen with: Other...,选择你在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上,使用斯科特轰的方法(通过一个bat文件)来处理的关联。

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

希望有所帮助。