>

수정 : J.F. Sebastian의 제안에 따르면 다음과 같은 오류가 훨씬 더 간단합니다.

Python 2.6.4 (r264:75708, Oct 26 2009, 08:23:19) [MSC v.1500 32 bit (Intel)]
Type "copyright", "credits" or "license" for more information.
IPython 0.10 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object'. ?object also works, ?? prints more.
  Welcome to pylab, a matplotlib-based Python environment.
  For more information, type 'help(pylab)'.
In [1]: open(r'c:\test.bin', 'wb').write('a'*67076095)
In [2]: open(r'c:\test.bin', 'wb').write('a'*67076096)
In [3]: open(r'z:\test.bin', 'wb').write('a'*67076095)
In [4]: open(r'z:\test.bin', 'wb').write('a'*67076096)
---------------------------------------------------------------------------
IOError                                   Traceback (most recent call last)
C:\Documents and Settings\User\<ipython console> in <module>()
IOError: [Errno 22] Invalid argument
In [5]:

C :는 로컬 드라이브이고 Z :는 네트워크 드라이브입니다.

원래 질문 :

cPickle을 사용하여 ~ 67MB보다 큰 파일을 네트워크 드라이브 (ReadyNAS Pro Pioneer edition)에 쓰면 Windows XP의 Python 2.6.4가 충돌합니다. 큰 파일을 피클 링하고 싶습니다. 이것은 알려진 문제입니까? 해결 방법이 있습니까?

다음 스크립트는 충돌을 일으 킵니다 :

import cPickle, numpy
a = numpy.zeros(8385007)
print "Writing %i bytes..."%(a.nbytes)
cPickle.dump(a, open('test_a.pkl', 'wb'), protocol=2)
print "Successfully written."
b = numpy.zeros(8385008)
print "Writing %i bytes..."%(b.nbytes)
cPickle.dump(b, open('test_b.pkl', 'wb'), protocol=2) ##Crashes on a network drive
print "Successfully written." ##Doesn't crash on a non-network drive

ipython 프롬프트에서 충돌을 일으키는 단계는 다음과 같습니다.

Python 2.6.4 (r264:75708, Oct 26 2009, 08:23:19) [MSC v.1500 32 bit (Intel)]
Type "copyright", "credits" or "license" for more information.
IPython 0.10 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object'. ?object also works, ?? prints more.
  Welcome to pylab, a matplotlib-based Python environment.
  For more information, type 'help(pylab)'.
In [1]: pwd
Out[1]: 'C:\\Documents and Settings\\User'
In [2]: run test
Writing 67080056 bytes...
Successfully written.
Writing 67080064 bytes...
Successfully written.
In [3]: cd Z:
Z:\
In [4]: pwd
Out[4]: 'Z:\\'
In [5]: run 'C:\\Documents and Settings\\User\\test'
Writing 67080056 bytes...
Successfully written.
Writing 67080064 bytes...
---------------------------------------------------------------------------
IOError                                   Traceback (most recent call last)
C:\Documents and Settings\User\test.py in <module>()
      8 b = numpy.zeros(8385008)
      9 print "Writing %i bytes..."%(b.nbytes)
---> 10 cPickle.dump(b, open('test_b.pkl', 'wb'), protocol=2)
     11 print "Successfully written."
     12
IOError: [Errno 22] Invalid argument
WARNING: Failure executing file: <C:\\Documents and Settings\\User\\test.py>
In [6]:

C :는 머신의 로컬 하드 드라이브입니다. Z :는 네트워크 연결 스토리지입니다.


  • 답변 # 1

    문제가 다음과 관련이 있다고 생각합니다. http://support.microsoft.com/default.aspx?scid=kb;en-us;899149

    ... 그래서 시도해보십시오. open (r'z : \ test.bin ','w + b '). write ('a '* 67080064)

    * 인수 : 'w + b'

관련 자료

  • 이전 kubernetes - cifs를 사용하여 flexvolume을 구성하면 포드가 노드에 잘못된 디렉토리를 마운트 함
  • 다음 SQL Server 2008에서는 NHibernate에서 테이블 반환 매개 변수를 저장 프로 시저에 전달할 수 있습니다