Временная ассоциация файлов для одного сеанса cmd.exe - PullRequest
9 голосов
/ 07 апреля 2011

Мне нужно установить связь для файлов .py, которые будут выполняться с определенной версией Python. Но мне нужно сделать эту связь только для одного сеанса cmd.exe (параллельные сеансы не должны быть затронуты). Разрешает ли это Windows?

Я подозреваю, что ответ - нет, но я хотел бы увидеть некоторые доказательства, прежде чем выбрасывать идею включить такую ​​функцию в virtualenv .

Ответы [ 4 ]

8 голосов
/ 01 сентября 2011

Конечно, вы можете.Вы были очень близки к тому, чтобы ответить в своем комментарии к ответу Якоба -

Если возможно изменить сопоставление файлов с переменными среды - это поможет, но это не представляется возможным.

Возможно.Все, что вам нужно сделать, это использовать тип ключа реестра 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 .Из документов:

PEP 397-совместимая программа запуска для Python под Windows.См. http://www.python.org/dev/peps/pep-0397/ для PEP, http://www.red -dove.com / screencasts / launcher / launcher.html для Screencast

Вы можете даже пропустить расширение .py , если вы добавите его в переменную окружения PATHEXT .См. Вопрос Какие переменные среды будут использоваться при вызове EXE из командной строки?

3 голосов
/ 07 апреля 2011

В Windows вы можете изменять ассоциации файлов из командной строки, используя команды assoc и ftype (в настоящее время вы можете загрузить Справочник по командам Windows PDF-файл из здесь ) .

Вы можете увидеть, какой тип файла в настоящее время связан с файлами .py, с помощью команды assoc:

> 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 голос
/ 08 апреля 2011

Лучше всего будет установить переменную PATH в сценарии и вызвать python, написав python script.py. Файловые ассоциации являются глобальными и разделяются между процессами. Переменные среды являются локальными для процесса, и поэтому я предлагаю это решение.

0 голосов
/ 07 апреля 2011

Вы можете использовать команду windows set для установки временных ассоциаций, установка будет длиться столько же, сколько и оболочка, если только она не привязана к системным переменным среды.

...