Я не могу воспроизвести эту точную проблему на своем собственном компьютере, поэтому я не могу дать конкретные советы, но вот некоторые общие комментарии о том, как отлаживать подобные вещи.
Когда вы видите «недопустимый аргумент» в виде исключения IOERROR или OSError из питона, это означает, что переводчик пытался сделать системный вызов, который не удалось, и установить errno
в код EINVAL
. (Тангенциально, python действительно не должен печатать числовые значения для кодов errno - символические имена стандартизированы, но числа не являются.) Первое, что вам нужно сделать, это выяснить, какой системный вызов он был, и самый простой способ делать то, что запустить программу под утилитой strace
, как это:
$ strace -f -o strace.log python yourscript.py [arguments...]
Подождите, это не получится, то поиск файла strace.log
для «-1 E» (именно это строка). Вы найдете что-то вроде этого:
times({tms_utime=162, tms_stime=123, tms_cutime=0, tms_cstime=0}) = 1718279979
write(1, "2.85\n", 5) = -1 EINVAL (Invalid argument)
Вы затем прочитать страницу человека для системного вызова, который не удался («man 2 write
» в данном случае) и найдите имя ERRNO коды (EINVAL
в данном случае), и посмотреть, то, что он говорит, пошло не так.
В этом случае я сильно подозреваю, что вы обнаружили ошибку в интерпретаторе Python или в операционной системе. «Недопустимый аргумент» означает, что он говорит - один из входных аргументов системного вызова имел недопустимое значение. Вы не делаете ничего сложного в своем сценарии, так что либо интерпретатор испортил свои системные вызовы, либо ядро неправильно поняло то, что хотел интерпретатор.
Я делаю много вещей в своем сценарии. Я использую эти типы сообщений печати много раз. Что происходит до того, как эта печать попытается запустить определенную команду ATA на отдельном диске и распечатать что произошло. Ваше решение отлично подходит для Linux, но, к сожалению, я работаю с Python 2.5 на компьютере под управлением Windows 7. –
Также вопрос, как вы предлагаете избегать такой ошибки? –
Было бы полезно, если бы вы упомянули операционную систему и версию Python, которые вы используете, в рамках вашего вопроса. Там * * эквиваленты strace для Windows - я, вероятно, сначала попробую Microsoft Process Monitor (http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx). Я бы предположил, что ваша проблема на самом деле связана с командой ATA, которую вы пытаетесь запустить, и IOError присоединяется к вызову clock() по ошибке, но не видя, что часть кода трудно сказать. – zwol