Я пытаюсь написать сценарий python для удаленного управления моей виртуальной машиной. Например, я хочу запустить программу на своей виртуальной машине и проверить, запущена ли она. Для этого шага я пытаюсь использовать Os.system, и кажется, что он работает, но для лучшего контроля мне нравится использовать подпроцесс, но, к сожалению, успеха не было. Я предоставил мой код для обоих os.system и подпроцесса следующим образом:Использование os.system и subprocess.Popen
os.system("vmrun -gu root -gp mohsen77 runProgramInGuest F:\Client\Ubuntu10464bit.vmx usr/bin/tcpreplay --intf1=eth4 /home/srastega/output.pcap")
print('PID is:' + str(os.getpid()))
args = shlex.split("vmrun -gu root -gp mohsen77 runProgramInGuest F:\Client\Ubuntu10464bit.vmx /bin/ls -l")
tcpreplay = subprocess.Popen(args, stderr=subprocess.STDOUT, stdout=subprocess.PIPE, shell=True)
out, err = tcpreplay.communicate()
print(out)
print('PID is:' + str(tcpreplay.pid))
Для второй части кода я получаю сообщение об ошибке:
Error: Cannot open VM: F:\ClientUbuntu10464bit.vmx, The virtual machine cannot b e found
Сообщение об ошибке имеет недостающие \ перед 'U'. В общем, хотя я не знаю, почему они ведут себя по-другому, я немного подозрительно отношусь к этим одиночным обратным слэшам в строке с двумя кавычками. Я буду беспокоиться о том, что те, кто искалечен. – rra
Хороший комментарий! Я обнаружил, что вывод shlex.split не рассматривает эти \ s в пути, поэтому, если я распечатываю аргументы, это будет: ['vmrun', '-gu', 'root', '-gp', ' mohsen77 ',' runProgramInGuest ',' F: ClientUbuntu10464bit.vmx ','/bin/ls ',' -l '], чего мы не хотим. Я должен найти решение для резервирования тех, когда я использую split. – samaneh
Проблема решена путем изменения строки на: args = shlex.split ("vmrun -gu root -gp mohsen77 runProgramInGuest F: /Client/Ubuntu10464bit.vmx/bin/ls -l") – samaneh