scriptsim
является модулем расширения C, поэтому информация об исключении и трассировке доступна только в той степени, в которой модуль хочет передать ее вам. Ваша проблема в том, что этот модуль необходимо настроить, и он фактически выводит свою конфигурацию из параметров программной команды (sys.argv). Это зло.
Но если вы посмотрите на его python_agent.c
(download and uppack here), вы видите:
Py_GetArgcArgv (&argc, &argv);
if (argc < 5) {
PyErr_SetString (PyExc_IOError,
"missing arguments in invokation");
fatal_error = 1;
return -1;
}
{
int tcp_port, read_fn, reg_num;
const char *error_msg = NULL;
if (sscanf (argv[3], "%d", &tcp_port) != 1) {
PyErr_SetString (PyExc_IOError,
"invalid argv[3] in invokation");
fatal_error = 1;
return -1;
}
if (sscanf (argv[4], "%d", &read_fn) != 1) {
PyErr_SetString (PyExc_IOError,
"invalid argv[4] in invokation");
fatal_error = 1;
return -1;
}
if (sscanf (argv[5], "%d", ®_num) != 1) {
PyErr_SetString (PyExc_IOError,
"invalid argv[5] in invokation");
fatal_error = 1;
return -1;
}
Предполагая, что вы знаете, что tcp_port
, read_fn
и reg_num
, Вы можете кормить модуль, что ему нужно, установив свой собственный sys.argv
до первого вызова. Это строки аргументов, поэтому конвертируйте int
и т. Д. По мере необходимости.
# copy args and configure simulator
argv = sys.argv
try:
sys.argv = [argv[0], 'dummy', 'dummy', tcp_port, read_fn, reg_num]
sim = scriptsim.Simulator()
finally:
sys.argv = argv
Содержит ли конструктор для симулятора любые аргументы? Если да, возможно, вам не хватает этих. – station
Попробуйте сохранить его в переменной. Создайте объект,
, как показано в документации. –Это было бы очень странно для стандартного модуля python. Оказывается, 'scriptsim' является модулем расширения, и это исключение возникает в' agent_python.c'. Возможно, у вас уже есть источник на вашем компьютере или загрузка [здесь] (http://www.nelsim.com/scriptsim/download_v101.html). Я не понял точной проблемы, но похоже, что где-то требуются аргументы. – tdelaney