از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
خواندن از stdin در پایتون
سرفصلهای مطلب
معرفی
در اکثر زبان های برنامه نویسی، داده ها را می توان از منابع مختلفی مانند فایل ها، پایگاه های داده یا ورودی کاربر خواند. با این حال، یکی از رایج ترین اشکال ورودی، ورودی استاندارد یا stdin است.
این مقاله چند روش مختلف را برای خواندن از stdin در پایتون ارائه میکند، که یک مهارت مهم برای هر توسعهدهندهای است که کار میکند. روی command-line رابط ها
stdin چیست؟
ورودی استاندارد که معمولاً stdin نامیده می شود، جریانی است که یک برنامه داده های ورودی خود را از آن می خواند. این یکی از سه جریان استاندارد در سیستم های کامپیوتری است، در کنار stdout (خروجی استاندارد) و stderr (خطای استاندارد). به طور پیش فرض، stdin به داده هایی اطلاق می شود که کاربر از صفحه کلید وارد می کند.
توجه داشته باشید: مفهوم stdin، stdout و stderr از سیستم عامل های مشابه یونیکس می آید، اما در سیستم های دیگر مانند ویندوز نیز موجود است. آنها برای بینprocess ارتباط و می تواند تغییر مسیر دهد، که یک ویژگی قابل توجه در اسکریپت نویسی پوسته و برنامه نویسی سیستم است.
در پایتون، می توانید از طریق به stdin دسترسی داشته باشید sys.stdin
شی، که مانند یک شیء فایل رفتار می کند. این بدان معنی است که می توانید از روش هایی مانند read()
، readline()
، و readlines()
برای خواندن از stdin، درست همانطور که از یک فایل می خوانید.
import sys
for line in sys.stdin:
print(line)
در این مثال ساده، برنامه از stdin خط به خط می خواند و هر خط را چاپ می کند تا زمانی که با سیگنال “EOF” (پایان فایل) مواجه شود. شما می توانید یک سیگنال EOF را در terminal با فشار دادن Ctrl+D
در سیستم های شبه یونیکس یا Ctrl+Z
در ویندوز
چرا از stdin بخوانید؟
ورودی استاندارد یا stdin یک مفهوم اساسی در برنامه نویسی کامپیوتری است که به جریان داده های پیش فرض اشاره دارد که یک برنامه داده های ورودی خود را از آن می خواند. اما چرا می خواهید به جای منبع دیگری از stdin بخوانید؟
خوب، خواندن از stdin یک راه معمول برای اجازه دادن به ورودی پویا کاربر در طول اجرای برنامه است. همچنین راهی برای دریافت داده های لوله شده از یک برنامه دیگر است. برای مثال، فرض کنید برنامهای دارید که متن را به نحوی پردازش میکند، و میخواهید بتوانید از آن در خط لوله یونیکس استفاده کنید. process خروجی یک برنامه دیگر خواندن از stdin راهی برای رفتن است.
روش خواندن از stdin در پایتون
پایتون، مانند بسیاری از زبان های برنامه نویسی، چند راه مختلف برای خواندن از stdin ارائه می دهد. در بخشهای بعدی چند مورد از رایجترین روشها را بررسی میکنیم.
با استفاده از sys.stdin
را sys.stdin
شی در پایتون یک شی فایل مانند است که به عنوان جریان stdin برای برنامه پایتون عمل می کند. شما می توانید از این جریان مانند آنچه از یک فایل بخوانید.
در اینجا یک مثال است:
import sys
line = sys.stdin.readline()
line = line.strip()
print(f"Received: {line}")
در این کد ما به سادگی استفاده می کنیم stdin
‘s readline()
روش دریافت ورودی از کاربر سپس خط با پیشوند “دریافت شده:” چاپ می شود.
اگر این کد را اجرا کنید و مقداری ورودی را تایپ کنید، خواهید دید که هر خطی را که وارد می کنید بازتاب می دهد:
$ python read_stdin.py
Hello, world!
Received: Hello, world!
با استفاده از ورودی() تابع
را input()
تابع یک راه ساده تر برای خواندن یک خط ورودی از stdin است. این تابع یک خط ورودی را می خواند، آن را به یک رشته تبدیل می کند (خط جدید انتهایی را حذف می کند)، و آن رشته را برمی گرداند.
در اینجا یک مثال است:
line = input()
print("Received: " + line)
دوباره، اگر این کد را اجرا کنید و مقداری ورودی را تایپ کنید، خواهید دید که به خطی که وارد کرده اید بازتاب می دهد:
$ python read_input.py
Hello, world!
Received: Hello, world!
را input()
تابع همیشه یک رشته را برمی گرداند. اگر میخواهید یک عدد یا نوع دیگری از داده را بخوانید، باید رشته را با استفاده از تابعی مانند آن به آن نوع تبدیل کنید. int()
یا float()
.
خواندن چند خط از stdin
در پایتون، خواندن چندین خط از stdin به چند روش قابل انجام است. یک رویکرد رایج استفاده از الف است for
حلقه با sys.stdin
. این به شما امکان می دهد تا روی هر خطی که وارد می شود تکرار کنید تا زمانی که یک کاراکتر EOF (پایان فایل) دریافت شود.
در اینجا یک مثال است:
import sys
for line in sys.stdin:
print(line)
در این کد، هر خطی که در stdin وارد می شود، چاپ می شود. برنامه به خواندن خطوط ادامه می دهد تا زمانی که یک کاراکتر EOF دریافت شود. شما می توانید این را با فشار دادن شبیه سازی کنید Ctrl+D
در terminal.
راه دیگر برای خواندن چندین خط ورودی از stdin استفاده از عبارت است input()
عملکرد درون یک حلقه این یک رویکرد کاربر پسندتر است زیرا منتظر می ماند تا کاربر فشار دهد Enter
قبل از خواندن خط بعدی
در اینجا روش انجام این کار آمده است:
while True:
try:
line = input()
print(line)
except EOFError:
break
در این حالت، برنامه همچنین به خواندن خطوط تا دریافت یک کاراکتر EOF ادامه میدهد.
توجه داشته باشید: را input()
تابع به طور خودکار کاراکتر خط جدید را در انتهای خط حذف می کند، در حالی که sys.stdin
نمی کند.
خواندن تعداد مشخص کاراکترها از stdin
گاهی اوقات، ممکن است بخواهید تعداد خاصی از کاراکترها را از stdin بخوانید. این را می توان با استفاده از read()
روش ارائه شده توسط sys.stdin
. را read()
متد یک عدد صحیح را به عنوان آرگومان می گیرد که تعداد کاراکترهای خواندنی را مشخص می کند.
در اینجا مثالی وجود دارد که در آن 10 کاراکتر از stdin را می خوانیم:
import sys
chars = sys.stdin.read(10)
print(chars)
در این کد، برنامه 10 کاراکتر اول ورودی را می خواند و آنها را چاپ می کند. اگر کمتر از 10 کاراکتر وارد شود، برنامه تا زمانی که 10 کاراکتر را بخواند منتظر ورودی بیشتر می ماند. stdin
دارد read()
تابع از آنجایی که یک شی فایل مانند است، بنابراین، شما می توانید فقط تعداد معینی از کاراکترها را بخوانید، درست مانند فایل ها.
توجه داشته باشید: را read()
متد به طور خودکار کاراکترهای خط جدید را حذف نمی کند، بنابراین اگر ورودی شامل کاراکترهای خط جدید در 10 کاراکتر اول باشد، آنها در خروجی گنجانده می شوند.
یادت باشد input()
تابع همچنین می تواند برای خواندن تعداد مشخصی از کاراکترها استفاده شود، اما عملکرد آن کمی متفاوت است. را input()
تابع یک خط ورودی را می خواند (تا کاراکتر خط جدید)، و سپس می توانید از برش برای به دست آوردن تعداد دلخواه کاراکتر استفاده کنید.
در اینجا یک مثال است:
line = input()
chars = line(:10)
print(chars)
در این حالت، برنامه یک خط ورودی را می خواند و سپس 10 کاراکتر اول آن خط را چاپ می کند. اگر خط کمتر از 10 کاراکتر باشد (بدون احتساب خط جدید)، کل خط چاپ می شود.
مدیریت خطای EOFE هنگام خواندن از stdin
هنگام خواندن از stdin در پایتون، ممکن است با یک مواجه شوید EOFError
. این خطا زمانی ایجاد می شود که یکی از توابع داخلی مانند input()
بدون خواندن هیچ داده ای به یک شرط پایان فایل (EOF) برخورد می کند. این معمولاً زمانی اتفاق میافتد که برنامهای را اجرا میکنید که منتظر ورودی است اما هیچ ورودی دریافت نمیکند. مهم است که این خطا را در کد خود مدیریت کنید تا از خراب شدن غیرمنتظره برنامه خود جلوگیری کنید.
در اینجا روش رسیدگی به خطای EOFE آورده شده است:
try:
data = input()
except EOFError:
print("EOFError encountered. No input received.")
در این کد از یک بلوک try-except برای گرفتن و رسیدگی به آن استفاده می کنیم EOFError
. اگر input()
با یک وضعیت EOF، برنامه به جای خراب شدن، پیامی را چاپ می کند.
نتیجه
خواندن از stdin یک کار اساسی در برنامه نویسی پایتون است، به خصوص وقتی که با آن سروکار داریم command-line برنامه ها یا اسکریپت ها در این مقاله، stdin چیست، چرا ممکن است بخواهید از آن بخوانید و چگونه با استفاده از روشهای مختلف این کار را انجام دهید، بررسی کردهایم. ما همچنین روش رسیدگی به یک را پوشش داده ایم EOFError
، که می تواند هنگام خواندن از stdin رخ دهد. درک این مفاهیم به شما کمک می کند تا برنامه های پایتون قوی تر و قابل اعتمادتری ایجاد کنید.
(برچسبها به ترجمه)# python
منتشر شده در 1402-12-28 21:18:09