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

问题描述 投票:9回答:4

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

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

python windows file-association
4个回答
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兼容启动器。请参阅http://www.python.org/dev/peps/pep-0397/获取PEP,http://www.red-dove.com/screencasts/launcher/launcher.html获取截屏视频

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


3
投票

在Windows中,您可以使用assocftype命令从命令行更改文件关联(您当前可以从here下载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会话之前将其恢复。


1
投票

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.