2017-03-06 5 views
1

Ich versuche, Powershell-Ausgabe über Errbot in Slack zurückgegeben zu bekommen. Der Bot funktioniert ordnungsgemäß, führt den Code korrekt aus und die Ausgabe wird wie erwartet in der Shell angezeigt. Kann ich die zurückgelieferten Daten über den Python-Code in den Slack-Zustand schicken oder muss ich ein zurückzugebendes Objekt zurückgeben? Im Folgenden erwarte ich, dass var x die zurückgegebenen Daten angibt, aber das ist offensichtlich nicht der Fall.Daten von Errbot zurücksenden

@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 

Antwort

2

subprocess.call nicht die Ausgabe des Befehls zurück, sondern gibt returncode des Prozesses. Sie benötigen andere Funktionen wie subprocess.check_output verwenden:

@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 HINWEIS: raw Stringliterale verwenden, können Sie Schrägstriche kompakt ausdrücken:

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

Vielen Dank für die prompte und korrekte Antwort! Jetzt um die Ausgabe zu formatieren .. :) –

Verwandte Themen