2013-03-20 4 views
0

Я пытаюсь написать сценарий 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

+0

Сообщение об ошибке имеет недостающие \ перед 'U'. В общем, хотя я не знаю, почему они ведут себя по-другому, я немного подозрительно отношусь к этим одиночным обратным слэшам в строке с двумя кавычками. Я буду беспокоиться о том, что те, кто искалечен. – rra

+0

Хороший комментарий! Я обнаружил, что вывод shlex.split не рассматривает эти \ s в пути, поэтому, если я распечатываю аргументы, это будет: ['vmrun', '-gu', 'root', '-gp', ' mohsen77 ',' runProgramInGuest ',' F: ClientUbuntu10464bit.vmx ','/bin/ls ',' -l '], чего мы не хотим. Я должен найти решение для резервирования тех, когда я использую split. – samaneh

+0

Проблема решена путем изменения строки на: args = shlex.split ("vmrun -gu root -gp mohsen77 runProgramInGuest F: /Client/Ubuntu10464bit.vmx/bin/ls -l") – samaneh

ответ

0

Обратные косые черты в строке в двойных кавычках может иметь особый смысл, который может привести к их исчезновению. Я не уверен, почему два вызова работают по-другому, но попробуйте либо удвоить обратную косую черту, либо перейти на косые черты.

(Подняли к ответе на обсуждение в комментариях.)

Смежные вопросы