2010-07-13 6 views
1

У меня не было большой удачи, чтобы найти хорошее объяснение того, какие недопустимые ошибки аргументов и что их вызовет.IOError: [Errno 22] Недопустимый аргумент с передачей часов() в

Мой текущий образец Я работаю с является

import sys 
mylog="mylog.log" 
sys.stdout = open(mylog,'w') 
#lots of code 
#. 
#. 
#. 
#End of lots of code 
from time import clock 
print "blablabla",clock() 

Я получаю ошибку Invalid Argument IOError на линии синхронизации. Я также пробовал

print "blablabla\t%s"%clock() 

Любая информация об этой ошибке была бы очень полезной. Эти строки отлично работают на коротких тиражах, это сразу же после запуска кода, пока оно ломается. Я попытался установить размер буфера на что-то низкое, как 45-100 строк.

ответ

3

Я не могу воспроизвести эту точную проблему на своем собственном компьютере, поэтому я не могу дать конкретные советы, но вот некоторые общие комментарии о том, как отлаживать подобные вещи.

Когда вы видите «недопустимый аргумент» в виде исключения 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 или в операционной системе. «Недопустимый аргумент» означает, что он говорит - один из входных аргументов системного вызова имел недопустимое значение. Вы не делаете ничего сложного в своем сценарии, так что либо интерпретатор испортил свои системные вызовы, либо ядро ​​неправильно поняло то, что хотел интерпретатор.

+0

Я делаю много вещей в своем сценарии. Я использую эти типы сообщений печати много раз. Что происходит до того, как эта печать попытается запустить определенную команду ATA на отдельном диске и распечатать что произошло. Ваше решение отлично подходит для Linux, но, к сожалению, я работаю с Python 2.5 на компьютере под управлением Windows 7. –

+0

Также вопрос, как вы предлагаете избегать такой ошибки? –

+1

Было бы полезно, если бы вы упомянули операционную систему и версию Python, которые вы используете, в рамках вашего вопроса. Там * * эквиваленты strace для Windows - я, вероятно, сначала попробую Microsoft Process Monitor (http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx). Я бы предположил, что ваша проблема на самом деле связана с командой ATA, которую вы пытаетесь запустить, и IOError присоединяется к вызову clock() по ошибке, но не видя, что часть кода трудно сказать. – zwol

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

  • Нет связанных вопросов^_^