2013-02-25 3 views
2

fileinput 파이썬 모듈을 사용하여 이상한 동작이 나타납니다. 변경하려는 파일에 사용자 읽기 권한이 없으면 파일이 삭제됩니다. 나는이 파일을 실행하면fileinput.py 대상 파일 삭제

import fileinput 

try: 
    for line in fileinput.input('TEST', inplace=1): 
     line = line.strip() 
     if '/' in line: 
      print "PATH: " + line 
     else: 
      print line 
except Exception as e: 
    print e 

, 내가 얻을 :

$ ls -l 
--wxrwxrwx 1 myusername agqt3 0 Feb 25 11:02 TEST 
$ python test.py 
[Errno 13] Permission denied: 'TEST.bak' 
$ ls -l 
total 0 

파일이 삭제됩니다. 사용자 r이 포함되지 않은 사용 권한 비트 조합이있을 때마다 동일한 문제가 발생합니다. 나는 bash, cshksh에서 이것을 재현했다.

+0

TEST가 포함 된 디렉터리의 "w"권한이 누락 되었기 때문에 권한 거부 오류가 발생하고 있습니까? –

+0

@Cthulhu : 그렇지 않은 것 같습니다. 또한'/ tmp'에 새 디렉토리를 만들고'/ tmp/newDir'을'777 '로 설정하고이 디렉토리에있는 모든 것을 실행하더라도 여전히 문제가 있음을 확인할 수 있습니다. – gambol

답변

1

당신은 inplace=1을 사용하고있는 것 같습니다. 그렇기 때문에 파일을 덮어 쓸 것으로 예상됩니다. 이 작업을 수행하면 .bak 파일이 만들어지고 초기 파일 이름이 덮어 씁니다.

그러나 하지이 inital 파일을 읽을 수있는 권한이 (을하지만을 쓸 수 있습니다) 않기 때문에 백업이 생성 될 때 비어 (또는 실패), 원래 덮어 씁니다. http://docs.python.org/2/library/fileinput.html#fileinput.FileInput

옵션 인플레 이스 필터링 : 다음 인플레 이스 문서에서

키워드 인수하는 경우 인플레 이스 = 1은 fileinput.input에 전달 () 또는 fileinput 함수 생성자에있다 파일 이 백업 파일로 이동되고 표준 출력이 입력 파일로 전달됩니다 (백업 파일과 이름이 같은 파일이 이미있는 경우 이 대체됩니다). ilently). 이렇게하면 입력 파일을 제자리에 다시 쓰는 필터 을 작성할 수 있습니다. 백업 매개 변수가 (일반적으로 backup = '.') 인 경우 백업 파일에 대해 확장자를 지정하고 백업 파일은 계속 유지됩니다. 의 경우 확장자는 '.bak'이며 출력 파일이 이면 닫힙니다. 표준 입력이 인 경우 내부 교정이 비활성화됩니다.

+2

파일의 내용을 자동으로 잃어 버리는 것은 그리 좋지 않습니다. 'fileinput'은 그렇게 할 수 없습니다. –

+1

프로그래밍은 마음이 약한 사람들을위한 것이 아닙니다 : P – monkut

+1

사실, 파이썬이 성인 동의에 동의하는 동안, 그것은 완전히 무자비하지 않습니다. –