2024-10-05 14:31:45 发布
网友
我需要设置与特定python版本执行的.py文件的关联。但我要把这种联系只针对单身命令行.exe会话(不应影响并行会话)。Windows允许这样做吗?在
我怀疑答案是否定的,但是我想在放弃将这种特性放入virtualenv之前先看看一些证据。在
最好的办法可能是在脚本中设置PATH变量,然后通过编写python script.py来调用python。文件关联是全局的,并且在进程之间共享。环境变量对于一个过程来说是局部的,这就是我建议这个解决方案的原因。在
python script.py
在Windows中,您可以使用assoc和ftype命令从命令行更改文件关联(当前可以从here下载Windows命令参考PDF文件)。在
assoc
ftype
您可以使用assoc命令查看当前与.py文件关联的文件类型:
> assoc .py .py=Python.File
根据这些信息,您可以使用ftype命令检查当前与Python.File文件类型关联的程序:
Python.File
您还可以使用ftype更改关联的程序:
> ftype Python.File="C:\Python2.7\python.exe" "%1" %* Python.File="C:\Python2.7\python.exe" "%1" %*
以这种方式设置的关联是持久的,因为它们存储在Windows注册表中。这意味着您需要在终止cmd.exe会话之前将其设置或还原为所需的值。为此,我建议使用一个或多个批处理文件。在
cmd.exe
cmd.exe本身接受一个/k参数,您可以使用该参数在启动时执行一个批处理文件,该批处理文件将建立您最初想要的文件关联。然后还可以提供一个自定义的quit.bat,在退出cmd会话之前将其还原。在
/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?
REG_EXPAND_SZ
%python_home%\python %1 %*
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Python.File\shell\open\command
python_home
我已经说过,现在有专门的工具来解决这个问题,我强烈建议。它叫做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?
最好的办法可能是在脚本中设置PATH变量,然后通过编写
python script.py
来调用python。文件关联是全局的,并且在进程之间共享。环境变量对于一个过程来说是局部的,这就是我建议这个解决方案的原因。在在Windows中,您可以使用
assoc
和ftype
命令从命令行更改文件关联(当前可以从here下载Windows命令参考PDF文件)。在您可以使用
assoc
命令查看当前与.py文件关联的文件类型:根据这些信息,您可以使用
^{pr2}$ftype
命令检查当前与Python.File
文件类型关联的程序:您还可以使用
ftype
更改关联的程序:以这种方式设置的关联是持久的,因为它们存储在Windows注册表中。这意味着您需要在终止
cmd.exe
会话之前将其设置或还原为所需的值。为此,我建议使用一个或多个批处理文件。在cmd.exe
本身接受一个/k
参数,您可以使用该参数在启动时执行一个批处理文件,该批处理文件将建立您最初想要的文件关联。然后还可以提供一个自定义的quit.bat
,在退出cmd
会话之前将其还原。在当然可以。你在评论雅各布的回答时很接近于回答-
这是可能的。您所要做的就是在键的值中使用
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。从文件中:
如果将扩展名添加到PATHEXT环境变量中,甚至可以跳过该扩展名。看问题What environment variables will be used when calling an EXE from command line?
相关问题 更多 >
编程相关推荐