2011-05-31 104 views
5

如何判斷連接到我的工作室的文件(或tty)?在Linux上查找stdin文件路徑的Python

喜歡的東西:

>>> import sys 
>>> print sys.stdin.__path__ 
'/dev/tty1' 
>>> 

我可以看看在PROC:

import os, sys 
os.readlink('/proc/self/fd/%s' % sys.stdin.fileno()) 

但似乎應該有一個內置的方式嗎?

回答

1

Got it!

>>> import os 
>>> import sys 
>>> print os.ttyname(sys.stdin.fileno()) 
'/dev/pts/0' 
>>> 

raise小號OSError: [Errno 22] Invalid argument如果標準輸入不是一個TTY;但這很容易測試isatty()

2

的sys.std *對象是standard Python file objects,所以他們有一個name attributeisatty method

>>> import sys 
>>> sys.stdout.name 
'<stdout>' 
>>> sys.stdout.isatty() 
True 
>>> anotherfile = open('/etc/hosts', 'r') 
>>> anotherfile.name 
'/etc/hosts' 
>>> anotherfile.isatty() 
False 

短,告訴你,你得到了什麼TTY設備,這就是擴展被Python提供的API。

+2

請記住,'stdout' et。人。可能是一個沒有'name'和/或'isatty()'的文件類對象,所以你應該做好準備。 – kindall 2011-05-31 17:56:14

+0

我希望找出我所連接的TTY設備(如果工作室連接到TTY) – tMC 2011-05-31 17:56:33

+0

@ kindall:當然,對於標準輸出來說,所需要的只是一種「寫入」方法。 @tMC:那麼你所能做的只是檢查'/ proc'文件系統,或者如果操作系統通過庫提供了這樣的信息,那麼使用ctypes來訪問該信息。沒有進一步的stdlib python API,AFAIC。 – 2011-05-31 17:58:20