コマンドラインから esxcli を実行すると、次のようなコマンド
esxcli --server=222.222.222.222 --username=foo@user.local --password='bar' --vihost=111.111.111.111 network vswitch standard portgroup add -p vlan1 -v switch1
正常に動作します。ただし、名前空間を認識できないため、サブプロセスからの呼び出しは常に失敗します。これは、名前空間とコマンドを直接追加するのではなく、引用符で囲んでいるためです。サブプロセス呼び出しからの私の現在のコードは次のとおりです。
import settings
import subprocess
subprocess.call(["esxcli",
"--server="+ settings.vserver,
"--username="+ settings.user,
"--password=\'"+ settings.pwd + "\'",
"--vihost="+ settings.host,
"network vswitch standard portgroup add",
"-p "+ settings.newpgname,
"-v "+ settings.newpgswitch])
を実行するsubprocess.list2cmdline
と、次のようになります。
esxcli --server=222.222.222.222 --username=foo@user.local --password='bar' --vihost=111.111.111.111 "network vswitch standard portgroup add" "-p vlan1" "-v switch1"
名前空間とその後の引数はすべて引用符で囲まれていることに注意してください。
subprocess について私が見つけた質問のほとんどは、shell=True を扱っており、ハイフンでプレフィックスされていない追加の引数については何も扱っていません。
余分な引用符なしでサブプロセスに正しいコマンドを実行させるにはどうすればよいですか?