Определить, является ли текущая оболочка powershell в python - PullRequest
2 голосов
/ 09 апреля 2019

Какой рекомендуемый способ проверить, в какой оболочке работает моя программа на Python?Я знаю, что могу запросить os.environ.get('SHELL') для имени оболочки, но что я могу использовать для определения powershell?

1 Ответ

3 голосов
/ 09 апреля 2019

Как правило, переменная окружения SHELL не не сообщает вам, какая оболочка вызвала ваш сценарий, она только сообщает вам двоичный путь оболочки по умолчанию текущего пользователя (в Unix-подобном)платформы), как отмечает chepner .

Чтобы определить, какая оболочка вызвала ваш сценарий, вы должны изучить родительский процесс сценария .

Следующее работает с установленным пакетом psutil (он совместим как с v2, так и с v3):

import os, psutil, re

# Get the parent process name.
pprocName = psutil.Process(os.getppid()).name()

# See if it is Windows PowerShell (powershell.exe) or PowerShell Core (pwsh[.exe]):
isPowerShell = bool(re.fullmatch('pwsh|pwsh.exe|powershell.exe', pprocName))

При установке пакетаэто не вариант , вы можете использовать следующий обходной путь для обнаружения PowerShell, в частности , но обратите внимание на ограничения :

  • It предполагает стандартную установку PowerShell , в частности, в отношении переменной среды PSModulePath: то есть PSModulePath не должно быть предопределено вообще вне PowerShell (Unix-подобные платформы) или должно иметь только одна запись (Windows, предопределенная через реестрry).

  • Предполагается, что скрипт не был вызван с помощью вложенных вызовов оболочки;в частности, если вы запустили другую оболочку из PowerShell, которая затем запустила ваш скрипт, приведенное ниже решение все равно будет указывать, что ваш скрипт был запущен PowerShell.

import os

isPowerShell = len(os.getenv('PSModulePath', '').split(os.pathsep)) >= 2

Подход основан натот факт, что PowerShell добавляет дополнительные каталоги к PSModulePath при запуске, поэтому наличие в переменной нескольких каталогов означает, что сценарий (в конечном счете) был запущен из PowerShell.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...