2011-08-02 57 views
7

如何檢查給定文件描述符是否有效?如果可用,我想寫信給fd=3;否則,我想寫入標準輸出。我知道我可以用try-except聲明包裝每個os.write調用,但我想提前知道fd=3是否可寫。檢查文件描述符是否有效

回答

6

您可以使用os.fstat來確定文件描述符在每次寫入之前是否有效,但是您需要將其封裝在try /中,因爲無效的文件描述符會引發OSError。嘗試/除了創建自己的寫入功能可能會更好。

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

謝謝,我將使用'os.fstat'。 – cpburnz

2

如何試圖os.writefd=3一旦在啓動(一try內 - except塊),並更改基礎上的成功,所有的後續行爲?

這樣您就不必在try - except中包裝每一個電話。當然,如果fd=3在問題的中間停止有效(例如,如果它是從另一端關閉的管道),則會崩潰。

+1

我會嘗試調用'os.fstat'並檢查模式位而不是'os.write',以避免寫入垃圾到fd的副作用,否則是的,嘗試/除了是這個問題的完美成語。 「更好地請求寬恕等等」 –

+0

@Chris Farmiloe:'os.fstat'會檢測到破損的管道嗎? – NPE

+0

是的,會提出「關閉文件操作」ValueError,我相信 –