2017-03-01 286 views
1

我嘗試執行PowerShell命令來獲取內存使用情況並獲得結果。Python執行powershell命令

import subprocess 
output = subprocess.call(["powershell.exe", "Get-Counter -Counter "+'"\memory\\available mbytes"'+" -MaxSamples 10 -SampleInterval 1"]) 
try: 
    subprocess.check_output("Get-Counter -Counter "+'"\memory\\available mbytes"'+" -MaxSamples 10 -SampleInterval 1", shell=TRUE) 
except subprocess.CalledProcessError, e: 
    print "subproces CalledProcessError.output = " + e.output 

print output 

這是成功執行命令,但只得到以下結果:

subproces CalledProcessError.output = 
0 

我怎樣才能獲得PowerShell的結果回來?

+0

請問您的命令('找櫃檯-Counter 「\內存\可用兆字節」 -MaxSamples 10 -SampleInterval 1')在交互式工作PowerShell會話? –

回答

1

你需要做的:

try: 
    output = subprocess.check_output(
       ["powershell.exe", "Get-Counter", 
       "-Counter "+r'"\memory\available mbytes"', 
       "-MaxSamples 10", "-SampleInterval 1"], 
       shell=True) 
except subprocess.CalledProcessError, e: 
    print "subproces CalledProcessError.output = " + e.output 
print output 

通知True而非TRUE供應"powershell.exe"check_output和前r串與\

我會強烈建議使用psutil而不是嘗試獲取和解析PowerShell結果:

In [4]: import psutil 

In [5]: psutil.virtual_memory() 
Out[5]: svmem(total=17087684608L, available=8599142400L, percent=49.7, used=8488542208L, free=8599142400L) 

In [6]: psutil.swap_memory() 
Out[6]: sswap(total=38059204608L, used=14400655360L, free=23658549248L, percent=37.8, sin=0, sout=0) 
0

上面同樣的例子,但爲Python 3:

try: 
    output = subprocess.check_output(
       ["powershell.exe", "Get-Counter", 
       "-Counter "+r'"\memory\available mbytes"', 
       "-MaxSamples 10", "-SampleInterval 1"], 
       shell=True) 
except subprocess.CalledProcessError as e: 
    print ("subproces CalledProcessError.output =", e.output) 
print (output.decode())