같은하위 프로세스는 ESXCLI 네임 스페이스에게 내가 명령, 명령 줄에서 ESXCLI를 실행하면 제대로
esxcli --server=222.222.222.222 [email protected] --password='bar' --vihost=111.111.111.111 network vswitch standard portgroup add -p vlan1 -v switch1
잘 작동 인쇄되지 않습니다. 그러나 하위 프로세스에서 호출하면 네임 스페이스를 인식 할 수 없으므로 항상 실패합니다. 이는 이름 공간과 명령을 따옴표로 묶어 직접 추가하는 것이 아니기 때문입니다. 서브 프로세스 호출에서 내 현재 코드입니다 : 내가 subprocess.list2cmdline
을 실행하면
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])
, 내가 얻을 :
esxcli --server=222.222.222.222 [email protected] --password='bar' --vihost=111.111.111.111 "network vswitch standard portgroup add" "-p vlan1" "-v switch1"
참고 네임 스페이스와 그 이후의 인수가 모든 견적에 있음.
서브 프로세스에 대한 대부분의 질문은 shell = True를 처리하며 하이픈없는 접두어가 붙지 않는 인수에 대해서는 다루지 않습니다.
서브 프로세스를 추가 따옴표없이 올바른 명령을 실행하려면 어떻게합니까?
대신 오래된 os.system 호출을 대신 사용했습니다. – Magitrek
올바른 인수 목록이 어떻게 보이는지 보려면'shlex.split (shell_command) '를 호출하십시오. – jfs