주어진 파일 설명자가 유효한지 어떻게 확인합니까? 사용할 수있는 경우 fd=3
에 편지를 쓰고 싶습니다. 그렇지 않으면 stdout에 쓰려고합니다. 나는 try-except 문과 함께 os.write
전화를 모두 감쌀 수 있다는 것을 알고 있지만, fd=3
이 쓰기 가능한지 미리 알고 싶습니다.파일 설명자가 유효한지 확인하십시오.
답변
os.fstat
을 사용하여 파일 설명자가 각 쓰기 전에 유효한지 확인할 수 있지만 유효하지 않은 파일 설명자가 OSError
을 발생시키기 때문에 try/except로 감싸 야합니다. try/except를 사용하여 직접 쓰기 기능을 만드는 것이 더 나을 것입니다. 는 IS 제외
def write(data, fd=3):
try:
os.write(fd, data)
except OSError:
sys.stdout.write(data)
어떻게 한 번 시작 (A try
내부 - except
블록)에서 os.write
fd=3
을하려고에 대한 그의 성공을 기반으로 모든 후속 동작을 변경?
이렇게하면 모든 전화를 try
- except
번으로 묶을 필요가 없습니다. 물론, 문제가 발생했을 때 fd=3
이 유효하지 않으면 중단됩니다 (예 : 다른 쪽에서 닫히는 파이프 인 경우).
나는 /'os.fstat'를 호출 시도하고 FD에 쓰레기를 작성하는 부작용을 방지하기 위해, 오히려 os.write''보다 모드 비트를 확인하지만, 그, 그래, 노력하겠다고 이 문제에 대한 완벽한 숙어. "용서를 구하는 것이 더 좋다" –
@Chris Farmiloe :'os.fstat'가 깨진 파이프를 감지하겠습니까? – NPE
"닫힌 파일에 대한 연산"ValueError가 발생합니다. –
감사합니다. os.fstat를 사용합니다. – cpburnz