termios --- کنترل tty به سبک POSIX


این ماژول رابطی برای فراخوانی‌های POSIX جهت کنترل ورودی/خروجی tty فراهم می‌کند. برای توضیح کامل این فراخوانی‌ها، صفحه‌ی راهنمای یونیکس termios(3) را ببینید. این ماژول تنها برای نسخه‌هایی از یونیکس در دسترس است که از کنترل ورودی/خروجی tty به‌سبک termios POSIX پشتیبانی می‌کنند و در هنگام نصب پیکربندی شده‌اند.

تمام توابع این ماژول یک توصیف‌گر فایل با نام fd را به‌عنوان نخستین آرگومان خود دریافت می‌کنند. این می‌تواند یک توصیف‌گر فایل از نوع عدد صحیح باشد، مانند آنچه sys.stdin.fileno() بازمی‌گرداند، یا یک file object، مانند خود sys.stdin.

این ماژول همچنین تمام ثابت‌های مورد نیاز برای کار با توابع ارائه‌شده در اینجا را تعریف می‌کند؛ این ثابت‌ها همان نام همتاهایشان در C را دارند. لطفاً برای اطلاعات بیشتر درباره استفاده از این رابط‌های کنترل پایانه، به مستندات سیستم خود مراجعه کنید.

این ماژول توابع زیر را تعریف می‌کند:

termios.tcgetattr(fd)

فهرستی حاوی ویژگی‌های tty برای توصیف‌گر فایل fd برمی‌گرداند، به این صورت: [iflag, oflag, cflag, lflag, ispeed, ospeed, cc] که در آن cc فهرستی از نویسه‌های ویژه tty است (هرکدام رشته‌ای به طول ۱، به‌جز آیتم‌های دارای اندیس‌های VMIN و VTIME، که وقتی این فیلدها تعریف شده باشند، عدد صحیح هستند). تفسیر پرچم‌ها و سرعت‌ها و همچنین اندیس‌دهی در آرایه‌ی cc باید با استفاده از ثابت‌های نمادین تعریف‌شده در ماژول termios انجام شود.

termios.tcsetattr(fd, when, attributes)

ویژگی‌های tty را برای توصیف‌گر فایل fd با استفاده از attributes تنظیم کنید، که فهرستی مانند فهرست بازگردانده‌شده توسط tcgetattr() است. آرگومان when تعیین می‌کند که ویژگی‌ها چه زمانی تغییر کنند:

termios.TCSANOW

ویژگی‌ها را بلافاصله تغییر دهید.

termios.TCSADRAIN

تغییر ویژگی‌ها پس از ارسال تمام خروجی صف‌شده.

termios.TCSAFLUSH

ویژگی‌ها را پس از ارسال تمام خروجی‌های در صف و دور ریختن تمام ورودی‌های در صف تغییر دهید.

termios.tcsendbreak(fd, duration)

یک break را روی توصیف‌گر فایل fd ارسال کنید. یک duration صفر، یک break را برای ۰٫۲۵ تا ۰٫۵ ثانیه ارسال می‌کند؛ یک duration غیرصفر معنایی وابسته به سیستم دارد.

termios.tcdrain(fd)

صبر کنید تا تمام خروجی نوشته‌شده در توصیف‌گر فایل fd ارسال شود.

termios.tcflush(fd, queue)

داده‌های در صف روی توصیف‌گر فایل fd را دور بریزید. انتخاب‌گر queue مشخص می‌کند کدام صف: TCIFLUSH برای صف ورودی، TCOFLUSH برای صف خروجی، یا TCIOFLUSH برای هر دو صف.

termios.tcflow(fd, action)

تعلیق یا ازسرگیری ورودی یا خروجی روی توصیف‌گر فایل fd. آرگومان action می‌تواند برای تعلیق خروجی TCOOFF، برای ازسرگیری خروجی TCOON، برای تعلیق ورودی TCIOFF، یا برای ازسرگیری ورودی TCION باشد.

termios.tcgetwinsize(fd)

یک تاپل (ws_row, ws_col) بازمی‌گرداند که حاوی اندازه‌ی پنجره‌ی tty برای توصیف‌گر فایل fd است. نیازمند termios.TIOCGWINSZ یا termios.TIOCGSIZE است.

اضافه شده در نسخه‌ی 3.11.

termios.tcsetwinsize(fd, winsize)

اندازه‌ی پنجره‌ی tty برای توصیف‌گر فایل fd را از winsize تنظیم می‌کند، که یک تاپل دو آیتمی (ws_row, ws_col) مانند آنچه توسط tcgetwinsize() برگردانده می‌شود، است. نیاز است حداقل یکی از جفت‌های (termios.TIOCGWINSZ، termios.TIOCSWINSZ)؛ (termios.TIOCGSIZE، termios.TIOCSSIZE) تعریف شده باشد.

اضافه شده در نسخه‌ی 3.11.

همچنین ملاحظه نمائید

ماژول tty

توابع تسهیل‌کننده برای عملیات رایج کنترل پایانه.

مثال

در اینجا تابعی آمده است که گذرواژه را با بازتاب غیرفعال درخواست می‌کند. به روش استفاده از یک فراخوانی جداگانه tcgetattr() و یک دستور try ... finally توجه کنید تا اطمینان حاصل شود که ویژگی‌های قدیمی tty، صرف‌نظر از هر اتفاقی که بیفتد، دقیقاً بازیابی می‌شوند:

def getpass(prompt="Password: "):
    import termios, sys
    fd = sys.stdin.fileno()
    old = termios.tcgetattr(fd)
    new = termios.tcgetattr(fd)
    new[3] = new[3] & ~termios.ECHO          # lflags
    try:
        termios.tcsetattr(fd, termios.TCSADRAIN, new)
        passwd = input(prompt)
    finally:
        termios.tcsetattr(fd, termios.TCSADRAIN, old)
    return passwd