如何使用pysphere在远程机器上执行命令

时间:2013-08-07 11:50:58

标签: python start-process

让我想在远程机器上执行某些命令的VMware VM,例如shutdown / r或dir / o:d等。使用模块pysphere模块与VM通信。

我尝试了start_process,但它只是为cmd.exe创建进程我的代码创建过程是VM_object.start_process('cmd.exe',args = [“shutdown / r”])

2 个答案:

答案 0 :(得分:1)

运行命令cmd.exe时,需要添加/ c:

cmd.exe /c shutdown /r

正如here所述,您需要告诉cmd.exe运行您作为字符串传递的参数。 您的命令只是运行cmd.exe而没有实际发出您作为参数传递的命令。 / c标志指示cmd.exe执行传递的参数。

答案 1 :(得分:1)

VM_object.start_process(' cmd.exe',args = [" shutdown / r"]) 在虚拟机中,此命令将被解释为

cmd.exe "shutdown /r"

因为start_process使用subprocess.list2cmdline()方法来解析" args"参数。 list2cmdline()为任何包含空格的列表元素添加引号。

接下来,关于cmd参数。使用

cmd /?

了解您应该在代码中使用什么。在我的任务中有两个有趣的参数:

  • cmd.exe / c ...,执行后只关闭cmd窗口
  • cmd.exe / k ...,执行命令后不关闭控制台窗口

/ k有用,例如,你的python代码有兴趣询问popen执行的批处理文件的最后%errorlevel%。

所以,我认为,您的代码应如下所示:

VM_object.start_process('cmd.exe', args=["/c","shutdown", "/r"])