单个cmd.exe会话的临时文件关联

时间:2011-04-07 14:49:23

标签: python windows file-association

我需要为.py文件设置关联以使用特定的python版本执行。但我需要仅为单个cmd.exe会话建立此关联(并行会话不应受影响)。 Windows是否允许这样做?

我怀疑答案是否定的,但是我希望看到一些证据,然后再将这个功能转化为virtualenv

4 个答案:

答案 0 :(得分:8)

当然可以。你对雅各布答案的评论非常接近回答 -

  

如果可以更改文件与环境的关联   变量 - 它会有所帮助,但似乎不可能。

有可能。您所要做的就是在密钥的值中使用REG_EXPAND_SZ类型的注册表项和环境变量。比如说放 %python_home%\python %1 %*
作为
(Default)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。来自文档:

  

适用于Windows的PEP 397兼容启动器。看到   P http://www.python.org/dev/peps/pep-0397/,   用于截屏视频的http://www.red-dove.com/screencasts/launcher/launcher.html

如果将 .py 扩展名添加到 PATHEXT 环境变量,您甚至可以跳过它。请参阅问题What environment variables will be used when calling an EXE from command line?

答案 1 :(得分:3)

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

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

> assoc .py
.py=Python.File

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

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

您还可以使用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会话之前将其恢复。

答案 2 :(得分:1)

您最好的选择可能是在脚本中设置PATH变量并通过编写python script.py来调用python。文件关联是全局的,并在进程之间共享。环境变量是流程的本地变量,这就是我建议这个解决方案的原因。

答案 3 :(得分:0)

您可以使用windows set命令设置临时关联,只要shell执行,set就会持续,除非附加到系统环境变量。