1

我正在尝试通过 errbot 将返回的 powershell 输出恢复到松弛状态。该机器人运行正常,运行代码正确,并且输出按预期显示在 shell 中。我可以按原样通过 python 代码将返回的数据发送到 slack,还是需要返回一个对象才能返回?下面我希望 var x 给我返回的数据,但显然不是。

@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
4

1 回答 1

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

旁注:使用原始字符串文字,您可以紧凑地表达反斜杠:

>>> r"C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe" == \
... "C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\powershell.exe"
True
于 2017-03-06T05:27:30.687 回答