2011-05-31 13 views
5

पर stdin filepath ढूंढ रहा है मैं अपने stdios से जुड़ी फ़ाइल (या tty) कैसे कह सकता हूं?पाइथन लिनक्स

कुछ की तरह:

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

मैं proc में दे सकता है:

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

लेकिन जैसे वहाँ अंतर्निहित तरीका होना चाहिए लगता है?

उत्तर

1

समझ गया!

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

यह raise रों OSError: [Errno 22] Invalid argument अगर stdin एक TTY नहीं है; लेकिन isatty()

2

sys.std * वस्तुओं standard Python file objects हैं, इसलिए वे एक name attribute और एक isatty method है:

आप को बताने का
>>> import sys 
>>> sys.stdout.name 
'<stdout>' 
>>> sys.stdout.isatty() 
True 
>>> anotherfile = open('/etc/hosts', 'r') 
>>> anotherfile.name 
'/etc/hosts' 
>>> anotherfile.isatty() 
False 

लघु वास्तव में क्या TTY डिवाइस आपको मिला है, कि अजगर द्वारा की पेशकश एपीआई के विस्तार है।

+2

के साथ परीक्षण करने के लिए इतना आसान है कि ध्यान रखें कि 'stdout' et। अल। एक फ़ाइल जैसी वस्तु हो सकती है जिसमें 'name' और/या' isatty() 'नहीं है, इसलिए आपको इसके होने के लिए तैयार रहना चाहिए। – kindall

+0

मैं यह जानने की उम्मीद कर रहा था कि मुझे किस टीटीई डिवाइस से जोड़ा गया था (यदि stdios एक TTY से जुड़े हुए हैं) – tMC

+0

@kindall: बेशक; जो कुछ भी आवश्यक है, उसके लिए एक 'लेखन' विधि है। @tMC: तो आप जो भी कर सकते हैं वह '/ proc' फाइल सिस्टम की जांच कर रहा है, या यदि ओएस पुस्तकालय के माध्यम से ऐसी जानकारी प्रदान करता है, तो उस जानकारी तक पहुंचने के लिए ctypes का उपयोग करें। AFAIC के लिए इसके लिए कोई और stdlib पायथन एपीआई नहीं है। –