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

我需要为.py文件设置关联,以使用特定的python版本执行。 但是我只需要为单个cmd.exe会话创build这个关联(并行会话不应该受到影响)。 Windows允许这个吗?

我怀疑答案是否定的,但我希望看到一些certificate之前,抛出这个想法到virtualenv这样的function。

你当然可以。 你对Jakob的回答非常接近你的评论 –

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

有可能的。 您所要做的就是在密钥的值中使用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环境变量来决定,当然你也可以通过命令行来做到这一点。 看看我的回答问题,在哪里注册表的Windows存储,与哪个程序打开某些文件类型?

话虽如此,现在有特别的工具来解决这个问题,我强烈推荐。 这就是所谓的pylauncher 。 从文档:

在Windows下用于Python的PEP 397兼容启动器。 有关PEP的信息,请参阅http://www.python.org/dev/peps/pep-0397/ http://www.red-dove.com/screencasts/launcher/launcher.html

如果将其添加到PATHEXT环境变量,您甚至可以跳过.py扩展名。 查看问题从命令行调用EXE时将使用什么环境变量?

在Windows中,您可以使用assocftype命令从命令行更改文件关联(请参阅Windows命令行参考 )。

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

 > assoc .py .py=Python.File 

通过这些信息,您可以使用ftype命令来查看当前与Python.File文件类型相关联的程序:

 > 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会话之前将其恢复。

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

您可以使用windows set命令来设置临时关联,只要连接到系统环境变量,set就会持续。