簡體   English   中英

單個 cmd.exe 會話的臨時文件關聯

[英]Temporary file association for single cmd.exe session

我需要設置關聯 for.py 文件以使用特定的 python 版本執行。 但是我只需要為單個 cmd.exe 會話建立這個關聯(並行會話不應該受到影響)。 Windows 允許這樣做嗎?

我懷疑答案是否定的,但我希望在放棄將此類功能納入virtualenv的想法之前看到一些證據。

你當然可以。 您在對 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

如果將.py擴展名添加到PATHEXT環境變量中,您甚至可以跳過它。 請參閱從命令行調用 EXE 時將使用哪些環境變量的問題?

在 Windows 中,您可以使用assocftype命令從命令行更改文件關聯(您目前可以從此處下載Windows 命令參考PDF 文件)。

您可以使用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 命令來設置臨時關聯,除非附加到系統環境變量,否則設置將持續到 shell 執行的時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM