让我想在其上执行一些命令的 VMware VM,例如从远程机器上执行关机 /r 或 dir /o:d 等。使用模块 pysphere 模块与 VM 通信。
我试过 start_process 但它只是为 cmd.exe 创建进程 我创建进程的代码是 VM_object.start_process('cmd.exe', args=["shutdown /r"])
让我想在其上执行一些命令的 VMware VM,例如从远程机器上执行关机 /r 或 dir /o:d 等。使用模块 pysphere 模块与 VM 通信。
我试过 start_process 但它只是为 cmd.exe 创建进程 我创建进程的代码是 VM_object.start_process('cmd.exe', args=["shutdown /r"])
当您运行命令 cmd.exe 时,您需要添加 /c:
cmd.exe /c shutdown /r
如此处所述,您需要告诉 cmd.exe 运行您作为字符串传递的参数。您的命令只是运行 cmd.exe 而没有实际发出您作为参数传递的命令。/c 标志指示 cmd.exe 执行传递的参数。
VM_object.start_process('cmd.exe', args=["shutdown /r"]) 在虚拟机中这个命令将被解释为
cmd.exe "shutdown /r"
因为 start_process 使用 subprocess.list2cmdline() 方法来解析“args”参数。list2cmdline() 为任何包含空格的列表元素添加引号。
那么,接下来,关于 cmd 参数。采用
cmd /?
了解您应该在代码中使用什么。我的任务中有 2 个有趣的参数:
/k 很有用,例如,当您的 python 代码有兴趣询问由 popen 执行的批处理文件的最后 %errorlevel% 时。
所以,我认为,你的代码应该是这样的:
VM_object.start_process('cmd.exe', args=["/c","shutdown", "/r"])