单个的临时文件关联命令行.exe阶段

2024-10-05 14:31:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要设置与特定python版本执行的.py文件的关联。但我要把这种联系只针对单身命令行.exe会话(不应影响并行会话)。Windows允许这样做吗?在

我怀疑答案是否定的,但是我想在放弃将这种特性放入virtualenv之前先看看一些证据。在


Tags: 文件答案命令行py版本证据virtualenvwindows
3条回答

最好的办法可能是在脚本中设置PATH变量,然后通过编写python script.py来调用python。文件关联是全局的,并且在进程之间共享。环境变量对于一个过程来说是局部的,这就是我建议这个解决方案的原因。在

在Windows中,您可以使用assocftype命令从命令行更改文件关联(当前可以从here下载Windows命令参考PDF文件)。在

您可以使用assoc命令查看当前与.py文件关联的文件类型:

> assoc .py
.py=Python.File

根据这些信息,您可以使用ftype命令检查当前与Python.File文件类型关联的程序:

^{pr2}$

您还可以使用ftype更改关联的程序:

> ftype Python.File="C:\Python2.7\python.exe" "%1" %*
Python.File="C:\Python2.7\python.exe" "%1" %*

以这种方式设置的关联是持久的,因为它们存储在Windows注册表中。这意味着您需要在终止cmd.exe会话之前将其设置或还原为所需的值。为此,我建议使用一个或多个批处理文件。在

cmd.exe本身接受一个/k参数,您可以使用该参数在启动时执行一个批处理文件,该批处理文件将建立您最初想要的文件关联。然后还可以提供一个自定义的quit.bat,在退出cmd会话之前将其还原。在

当然可以。你在评论雅各布的回答时很接近于回答-

If it is possible to change file association with environment variables - it will help, but it doesn't seem possible.

这是可能的。您所要做的就是在键的值中使用REG_EXPAND_SZ类型的注册表项和环境变量。例如将
%python_home%\python %1 %*
作为
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Python.File\shell\open\command
键并将其值设置为REG_EXPAND_SZ,这样就可以定义用什么Python打开Python文件。您可以通过设置python_home环境变量来决定,当然,您可以在每个命令行会话中执行此操作。看看我对这个问题的回答where in the registry does Windows store, with which program to open certain file types?

我已经说过,现在有专门的工具来解决这个问题,我强烈建议。它叫做pylauncher。从文件中:

PEP 397 compatible launcher for Python under Windows. See http://www.python.org/dev/peps/pep-0397/ for PEP, http://www.red-dove.com/screencasts/launcher/launcher.html for screencast

如果将扩展名添加到PATHEXT环境变量中,甚至可以跳过该扩展名。看问题What environment variables will be used when calling an EXE from command line?

相关问题 更多 >