2011-08-02 3 views
7

주어진 파일 설명자가 유효한지 어떻게 확인합니까? 사용할 수있는 경우 fd=3에 편지를 쓰고 싶습니다. 그렇지 않으면 stdout에 쓰려고합니다. 나는 try-except 문과 함께 os.write 전화를 모두 감쌀 수 있다는 것을 알고 있지만, fd=3이 쓰기 가능한지 미리 알고 싶습니다.파일 설명자가 유효한지 확인하십시오.

답변

6

os.fstat을 사용하여 파일 설명자가 각 쓰기 전에 유효한지 확인할 수 있지만 유효하지 않은 파일 설명자가 OSError을 발생시키기 때문에 try/except로 감싸 야합니다. try/except를 사용하여 직접 쓰기 기능을 만드는 것이 더 나을 것입니다. 는 IS 제외

def write(data, fd=3): 
    try: 
     os.write(fd, data) 
    except OSError: 
     sys.stdout.write(data) 
+0

감사합니다. os.fstat를 사용합니다. – cpburnz

2

어떻게 한 번 시작 (A try 내부 - except 블록)에서 os.writefd=3을하려고에 대한 그의 성공을 기반으로 모든 후속 동작을 변경?

이렇게하면 모든 전화를 try - except 번으로 묶을 필요가 없습니다. 물론, 문제가 발생했을 때 fd=3이 유효하지 않으면 중단됩니다 (예 : 다른 쪽에서 닫히는 파이프 인 경우).

+1

나는 /'os.fstat'를 호출 시도하고 FD에 쓰레기를 작성하는 부작용을 방지하기 위해, 오히려 os.write''보다 모드 비트를 확인하지만, 그, 그래, 노력하겠다고 이 문제에 대한 완벽한 숙어. "용서를 구하는 것이 더 좋다" –

+0

@Chris Farmiloe :'os.fstat'가 깨진 파이프를 감지하겠습니까? – NPE

+0

"닫힌 파일에 대한 연산"ValueError가 발생합니다. –

관련 문제