【发布时间】:2016-04-16 09:35:37
【问题描述】:
我正在尝试在 python 2.6 中运行以下 subprocess.Popen() 命令
output = subprocess.Popen("psexec -accepteula \\machineName -u username -p password cmd.exe /C fsutil fsinfo drives", stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
print(output.communicate())
但我通过 output.communicate() 得到以下结果
('\r\n', '\r\nPsExec v2.11 - Execute processes remotely\r\nCopyright (C) 2001-2014 Mark Russinovich\r\nSysinternals - www.sysinternals.com\r\n\r\nConnecting to machineNameHere...\r\r\rStarting PSEXESVC service on machineNameHere...\r\r\rConnecting with PsExec service on machineNameHere...\r\r\rStarting cmd.exe on machineNameHere...\r\r\r\r\ncmd.exe exited on machineNameHere with error code 0.\r\n')
当我从 windows 的 cmd 行运行相同的 psexec 命令时,我得到了正确的输出。
PsExec v2.11 - Execute processes remotely
Copyright (C) 2001-2014 Mark Russinovich
Sysinternals - www.sysinternals.com
**Drives: A:\ C:\ D:\**
cmd.exe exited on machineNameHere with error code 0.
我正在寻找输出 **Drives: A:\ C:\ D:** 即使在使用 subprocess.Popen() 运行 psexec 命令时也是如此。有什么办法可以吗?
现在我通过运行 dir 和 echo "test" 等不同的命令来缩小问题的范围。问题似乎是 Popen 只将第一行读入标准输出,而不是完整的输出。有关如何解决此问题的任何建议?
【问题讨论】:
-
直接从进程标准输出中读取。
-
也许反斜杠在两个环境之间的解释不同?尝试对 Popen 命令使用原始字符串。
-
PsExec 不会将客户端输出中继给您。最好使用 OpenSSH 远程启动命令,尽管在 Windows 上安装有点痛苦。你也可以滚动你自己的 JSON 服务器。
-
@RishavKundu - 你建议使用 output.stdout.readlines() 吗?
标签: python subprocess psexec