如何使Python脚本成为特定文件类型(例如* .foo)的默认应用程序?同样,当我在Finder / Explorer中双击该文件时,我希望在Python脚本中打开该文件。
这可以在Win和/或OS X中执行吗?如果重要,该应用程序是PySide应用程序。
答案 0 :(得分:3)
在 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 Info
,Open 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)
foo
Get Info
或单击文件图标,然后单击获取信息或单击该文件并按命令 + I Open With
窗格中,选择python二进制文件的路径change All
按钮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上:
.docx
文件)Open with...
python
Always use the selected program to open this kind of file
。注意:这将在python shell的上下文中运行 .docx
文件的内容。一旦完成评估文件的内容,它将立即关闭。如果您想在文字处理器中编辑文件,也许您应该下载notepad++,并选择该应用程序作为默认值。