2017-03-06 9 views
1

私は、errbot経由でslackに返されたpowershellの出力を取得しようとしています。ボットが正しく機能しており、コードが正しく実行されていて、出力が期待通りにシェルに表示されています。その返されたデータをそのままPythonコードを介して送ることができますか、返すオブジェクトを返す必要がありますか?私は返されたデータをvar xに渡すことを期待していますが、明らかにそうではありません。errbotからスラックするデータを返す

@botcmd 
def find_vm(self, args, SearchString): 
    x = subprocess.call(["C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\powershell.exe", ". \"C:\\Program Files\\Toolbox\\PowerShell Modules\\vmware\\./vmware.psm1\";", "find-vm", SearchString]) 
    return x 

答えて

2

subprocess.callは、コマンドの出力を返しますが、プロセスのreturncodeを返していません。あなたはsubprocess.check_outputのような他の機能を使用する必要があります。

@botcmd 
def find_vm(self, args, SearchString): 
    try: 
     output = subprocess.check_output([ 
      r"C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe", 
      r'. "C:\Program Files\Toolbox\PowerShell Modules\vmware\./vmware.psm1";', 
      "find-vm", 
      SearchString 
     ]) 
    except subprocess.CalledProcessError: 
     # Error handling 
     return 'Command failed' 
    return output 

SIDE注:生の文字列リテラルを使用して、コンパクトにバックスラッシュを表現することができます。

>>> r"C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe" == \ 
... "C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\powershell.exe" 
True 
+0

は、迅速かつ正確な返事をどうもありがとうございます!今出力をフォーマットする:.. –

関連する問題