2016-04-30 2 views
1

Я пытаюсь проверить, установлен ли Python на компьютере с помощью сценария Powershell.Скрипт Powershell для проверки установки Python

Моя идея до сих пор запустить следующее:

$p = iex 'python -V' 

Если команда правильно выполняет (проверьте Exitcode на $p собственности), читать вывод и извлечь номер версии.

Однако я изо всех сил пытаюсь захватить вывод при выполнении сценария в PowerShell ISE. Он возвращает следующее:

python : Python 2.7.11 
At line:1 char:1 
+ python -V 
+ ~~~~~~~~~ 
    + CategoryInfo   : NotSpecified: (Python 2.7.11:String) [], RemoteException 
    + FullyQualifiedErrorId : NativeCommandError 

Может ли кто-нибудь указать в правильном направлении?

Приветствия, Prabu

+0

Проверьте значение в '$ LASTEXITCODE' автоматической переменной –

+0

@ MathiasR.Jessen Это дает мне логическое значение, если выражение успешно выбежала, я считаю. Однако, как я могу извлечь консольный вывод из самого выражения, так что я могу получить номер версии? –

ответ

1

кажется, что python -V выводит строку версии для stderr и не stdout.

Вы можете использовать поток редиректор для перенаправления ошибки в стандартный вывод:

# redirect stderr into stdout 
$p = &{python -V} 2>&1 
# check if an ErrorRecord was returned 
$version = if($p -is [System.Management.Automation.ErrorRecord]) 
{ 
    # grab the version string from the error message 
    $p.Exception.Message 
} 
else 
{ 
    # otherwise return as is 
    $p 
} 

Если вы уверены, что все версии питона у вас есть в вашей системе будут вести себя таким образом, вы можете сократить его вниз:

$version = (&{python -V}).Exception.Message 
+0

Спасибо - работает как шарм. –

+0

Обратите внимание, что '$ p -is [System.Management.Automation.ErrorRecord]' полагается только на Python, записывая только stderr. Если он также записывает в stdout, тогда '$ p' является массивом, а' -is' терпит неудачу. Таким образом, более безопасная альтернатива - это '$ version = ($ p |% gettype) -eq [System.Management.Automation.ErrorRecord]', тогда обработка случаев '$ version' не равна нулю (имеет выход stderr) и null (не имеет выхода stderr) –

+0

Именно поэтому я написал первый пример :-) –

Смежные вопросы