Я собрал инструмент Intel Pin и запускаю его на виртуальной машине из скрипта Python с помощью pyvbox:
gs = session.console.guest.create_session('win7', '')
time.sleep(45)
process, stdout, stderr = gs.execute('C:\\Windows\\System32\\cmd.exe', ['/C',
'C:\\Users\\win7\\Documents\\Pin\\pin-3.6-97554-g31f0a167d-msvc-windows\\pin.exe',
'-t',
'C:\\Users\\win7\\Documents\\Pin\\pin-3.6-97554-g31f0a167d-msvc-windows\\MyPinTool.dll',
'-o', outpath + str(fname) + '.out', '-i',
str(icount),'-f','1', '--',
'C:\\Users\\win7\\Documents\\folder1\\' + str(
fname)], timeout_ms=0)
time.sleep(120)
print "STDOUT"
print stdout
print "STDERR"
print stderr
Это приводит к следующему выводу (это вывод гостевой виртуальной машины,так что это не ошибка в скрипте Python):
A: Source \ pin \ pin \ image.cpp: LEVEL_PINCLIENT :: RTN_Name: 2027: утверждение не выполнено: RTN_Valid (x)
NO STACK TRACE ДОСТУПНЫ Pin: pin-3.6-97554-31f0a167d Copyright (c) 2003-2017, Intel Corporation.Все права защищены.
Файл, созданный программой Pin Tool, позднее успешно передается на хост-компьютер.Однако, если я вызываю эквивалентную команду из командной строки в гостевой виртуальной машине, сообщений об ошибках не возникает (я знаю по своему опыту, что в случае возникновения такой ошибки с Intel Pin - вы увидите это в окне командной строки).Также файл, созданный Pin Tool, может быть немного больше (но пока я вижу, что он не влияет на результаты, хранящиеся в файле) для некоторых исполняемых файлов, поэтому он работает в течение более длительного периода.
Так что мне любопытно: что вызывает такое поведение?Это способ, которым pyvbox выполняет вызов командной строки, или сама команда вызывает такой вывод?
Что интересно, если я изменю timeout_ms с 0 на 200, например, или - ошибок не возникнет.Но в документации pyvbox говорится, что timeout_ms = 0 будет ждать вечно, пока процесс не завершится.