2011-05-31 13 views
5

stdiosuma ekli dosyayı (veya tty'yi) nasıl anlarım?Python Linux'ta stdin dosya yolunu bulma

>>> import sys 
>>> print sys.stdin.__path__ 
'/dev/tty1' 
>>> 
ben proc görünebilir

: gibi

şey yerleşik bir yolu var olması gerektiği gibi

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

Ama görünüyor?

cevap

1

Anladım!

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

Bu raise s OSError: [Errno 22] Invalid argument Stdin TTY değilse; ancak bu isatty()

2

sys.std * nesneler standard Python file objects, bu nedenle bir name attribute ve isatty method var: Eğer tam olarak ne var TTY aygıtı söylüyorum

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

Kısa, Python tarafından sunulan API uzatmak bulunuyor.

+2

ile test edilmek için yeterince kolaydır 'stdout' et. ark. 'isim' ve/veya 'isatty()' olmayan bir dosya benzeri nesne olabilir, bu yüzden bunun gerçekleşmesi için hazırlıklı olmalısınız. – kindall

+0

Hangi TTY cihazının takılı olduğunu tespit etmeyi umuyordum (stdios bir TTY'ye bağlıysa) – tMC

+0

@kindall: Elbette; stdout için gereken her şey bir "yazma" yöntemidir. @tMC: Tüm yapmanız gereken '/ proc' dosya sistemini kontrol etmektir, ya da işletim sistemi bu bilgileri bir kütüphane üzerinden sağlıyorsa, bu bilgiye erişmek için ctipler kullanın. Bunun için başka bir stdlib python API'si yoktur, AFAIC. –