0

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

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

4

2 回答 2

1

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

cmd.exe /c shutdown /r

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

于 2013-08-14T12:18:47.850 回答
1

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

cmd.exe "shutdown /r"

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

那么,接下来,关于 cmd 参数。采用

cmd /?

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

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

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

所以,我认为,你的代码应该是这样的:

VM_object.start_process('cmd.exe', args=["/c","shutdown", "/r"])
于 2015-06-09T08:54:11.693 回答