0

リモート マシンから shutdown /r や dir /o:d などのコマンドを実行したい VMware VM を用意します。VM との通信にモジュール pysphere モジュールを使用します。

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

hereで説明されているように、文字列として渡したパラメーターを実行するように 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 に答える