如何使Python脚本成为特定文件类型的(例如* .foo)默认应用程序?在中,当我双击Finder/Explorer中的文件时,我想要在Python脚本中打开该文件。用Python脚本打开特定的文件类型?
这是可能在Win和/或OS X中完成的吗?该应用程序是一个PySide应用程序,如果这很重要。
如何使Python脚本成为特定文件类型的(例如* .foo)默认应用程序?在中,当我双击Finder/Explorer中的文件时,我想要在Python脚本中打开该文件。用Python脚本打开特定的文件类型?
这是可能在Win和/或OS X中完成的吗?该应用程序是一个PySide应用程序,如果这很重要。
foo
Get Info
或点击文件图标,然后单击获取信息或点击该文件,并击中命令 + 我Open With
窗格中,选择Python二进制文件的路径change All
按钮continue
这是哪个操作系统? – Chris 2012-01-01 19:54:42
Chris,Mac OS X. – 2012-01-01 22:39:36
有没有办法选择* .py文件而不是* .app(来自py2app或其他?)? – c00kiemonster 2012-01-02 13:45:14
在Windows上:
.docx
文件,在这个例子中)Open with...
python
Always use the selected program to open this kind of file
。注意:这将运行的.docx
文件在Python外壳的上下文的内容。它会在完成评估文件的内容后立即关闭。如果您想在文字处理器中编辑文件,也许应该下载notepad++,然后选择该应用程序作为默认应用程序。
OP希望使用_his自己的python script_打开特定的文件类型,而不是使用python本身。 – ekhumoro 2012-01-01 20:39:57
我发现这个老问题,而我自己寻找答案,我想我会分享我的解决方案。我使用了一个简单的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()
对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 Info
,Open with: Other...
,选择你在Automator中创建的应用程序,然后单击Change All...
按钮。
相似,但希望少参与的方法可能工作在Windows中。你也许可以创建一个具有以下的批处理文件(.bat
):
python C:\path\to\my\app\myapp.py %*
的%*
扩展到所有的参数。
只要你可以用批处理文件的文件扩展名相关联,那么你可以做到这一点,那就是你的解决方案。不过,我还没有尝试过这个Windows解决方案,所以拿它一粒盐。另一方面,Mac解决方案已经过测试。
举例来说,下面是我写的通用解决方案: 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”放在文件名之前(不带引号)。然后点击添加并关闭。
希望有所帮助。
将调用你一个Java存根的工作? HTTP://计算器。com/questions/550329 /如何使用默认关联程序打开文件否则,如果您需要便携式解决方案,我相当确定您运气不佳。 – kay 2014-10-19 20:11:46
从这个问题,我无法找到一种方式来打开任何应用程序的文件。 '.open'方法似乎只在默认应用程序中打开一个文件。即使你可以,它也不会比我的答案更好的解决方案,因为你需要一个Java应用程序来打开python脚本。 – potato 2014-10-25 22:46:30