Работа с потоками ввода-вывода (I/O) в Python включает в себя обработку стандартных потоков ввода, вывода и ошибок, а также возможность работы с другими потоками ввода-вывода, такими как файлы, сокеты и т. д. Давайте рассмотрим основные аспекты работы с потоками ввода-вывода в Python:
Стандартные потоки ввода-вывода
В Python стандартные потоки ввода, вывода и ошибок представлены объектами:
sys.stdin
используется для чтения данных из стандартного ввода (обычно клавиатуры)sys.stdout
используется для вывода данных в стандартный вывод (обычно на экран).sys.stderr
используется для вывода сообщений об ошибках в стандартный вывод ошибок (обычно на экран).Пример чтения данных из стандартного ввода
import sys
data = sys.stdin.readline()
print("Вы ввели:", data)
Пример вывода данных в стандартный вывод
import sys
sys.stdout.write("Привет, мир!\n")
Пример вывода сообщения об ошибке в стандартный вывод ошибок
import sys
sys.stderr.write("Это сообщение об ошибке!\n")
Работа с файлами и другими потоками ввода-вывода
Помимо стандартных потоков ввода-вывода, в Python можно работать с файлами, сетевыми сокетами, процессами и другими объектами, предоставляющими интерфейс ввода-вывода. Для работы с файлами используется функция `open()`, которая позволяет открыть файл в определенном режиме доступа (чтение, запись и т. д.).
with open("file.txt", "r") as file:
data = file.read()
print(data)
with open("file.txt", "w") as file:
file.write("Hello, world!\n")
Потоки ввода-вывода в сети
В Python также можно работать с сетевыми потоками ввода-вывода, используя модуль `socket`. Этот модуль позволяет создавать сокеты и осуществлять обмен данными между клиентом и сервером через сеть. Пример создания TCP-сервера:
import socket
HOST = '127.0.0.1'
PORT = 12345
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as server:
server.bind((HOST, PORT))
server.listen()
conn, addr = server.accept()
with conn:
print('Connected by', addr)
while True:
data = conn.recv(1024)
if not data:
break
conn.sendall(data)
Соотвественно пример создания TCP-клиента:
import socket
HOST = '127.0.0.1'
PORT = 12345
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as client:
client.connect((HOST, PORT))
client.sendall(b'Hello, world')
data = client.recv(1024)
print('Received', repr(data))