リモート マシンから shutdown /r や dir /o:d などのコマンドを実行したい VMware VM を用意します。VM との通信にモジュール pysphere モジュールを使用します。
start_process を試しましたが、cmd.exe のプロセスを作成しているだけです。プロセスを作成するためのコードは VM_object.start_process('cmd.exe', args=["shutdown /r"]) です。
リモート マシンから shutdown /r や dir /o:d などのコマンドを実行したい VMware VM を用意します。VM との通信にモジュール pysphere モジュールを使用します。
start_process を試しましたが、cmd.exe のプロセスを作成しているだけです。プロセスを作成するためのコードは VM_object.start_process('cmd.exe', args=["shutdown /r"]) です。
コマンド cmd.exe を実行するときは、/c を追加する必要があります。
cmd.exe /c shutdown /r
hereで説明されているように、文字列として渡したパラメーターを実行するように 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"])