簡體   English   中英

從Windows Server 2008中的powershell 3.0腳本獲取python版本

[英]Get python version from powershell 3.0 script in windows server 2008

在我的powershell腳本中,我試圖在Windows Server 2008中獲取python版本。此腳本只是在控制台中打印版本,但我沒有將值轉換為變量。

碼:

$python = & python -V
write-host "Python Version: " + $python

預期產量:

Python Version: Python 2.7.8

實際產量:

Python 2.7.8
Python Version:

任何人幫助我。

python.exe -V將版本信息寫入Error輸出流而不是Success輸出流。 您獲得觀察到的輸出,因為在運行Write-Host之前打印了“error”消息,並且第一個命令在Success輸出流上沒有產生要分配給$python輸出,因此當在Write-Host時該變量為空Write-Host聲明。

改變這一行:

$python = & python -V

對此:

$python = & python -V 2>&1

問題就會消失。

您的代碼應該按照設計工作。 無論出於何種原因,它將輸出發送到控制台而不是變量。 這段代碼在PowerShell 3.0上對我有用

$python = & python -V
write-host "Python Version: " + $python

您甚至在評論中提到類似的命令按預期工作,如下所示。

$python = & ping -n 1 localhost
write-host "Python Version: $python"

雖然我不確定根本原因,但您可以編寫一些代碼來強制將標准輸出捕獲到System.Diagnostics.Process對象中。 我從另一個SO 答案中獲取了代碼。

$pinfo = New-Object System.Diagnostics.ProcessStartInfo
$pinfo.FileName = "C:\Python34\python.exe"
$pinfo.Arguments = "-V"
$pinfo.RedirectStandardOutput = $true
$pinfo.UseShellExecute = $false
$p = New-Object System.Diagnostics.Process
$p.StartInfo = $pinfo
$p.Start() | Out-Null
$p.WaitForExit()
$stdout = $p.StandardOutput.ReadToEnd()
Write-Host "Python Version: $stdout"

我不確定為什么一個簡單的兩個襯墊不適合你。 當你做這樣的事情時會發生什么? 我再次在Path變量中沒有Python,所以我在我的例子中使用了該文件的全名。

Write-Host "Python Version: $(&"C:\Python34\python.exe" -V)"
or
Write-Host "Python Version: $(& python.exe -V)"

暫無
暫無

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

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