Nano Hash - криптовалюты, майнинг, программирование

Что читает sys.stdin?

Я понимаю, как открывать файлы, а затем использовать с ними предварительно встроенные функции Python. Но как работает sys.stdin?

for something in sys.stdin:
    some stuff here

lines = sys.stdin.readlines()

В чем разница между двумя вышеприведенными вариантами использования sys.stdin? Откуда он читает информацию? Это через клавиатуру, или нам все равно нужно предоставить файл?

05.04.2015

  • Вы знакомы с input()? Где бы input() ни брал данные, это sys.stdin. Это может быть терминал, или он может быть направлен из файла, или он может исходить из вывода другой программы, или это может быть что-то еще, в зависимости от того, как вы вызвали программу. 05.04.2015

Ответы:


1

Итак, вы использовали «предварительно встроенные функции» Python, предположительно, вот так:

file_object = open('filename')
for something in file_object:
    some stuff here

Это читает файл, вызывая итератор для файлового объекта, который возвращает следующую строку из файла.

Вместо этого вы можете использовать:

file_object = open('filename')
lines = file_object.readlines()

который считывает строки из текущей позиции файла в список.

Теперь sys.stdin — это просто еще один файловый объект, который Python открывает перед запуском вашей программы. Что вы делаете с этим файловым объектом, зависит от вас, но на самом деле он ничем не отличается от любого другого файлового объекта, просто вам не нужен open.

for something in sys.stdin:
    some stuff here

будет выполнять стандартный ввод до тех пор, пока не будет достигнут конец файла. И так будет это:

lines = sys.stdin.readlines()

Ваш первый вопрос действительно касается различных способов использования файлового объекта.

Во-вторых, откуда он читает? Он читает из файлового дескриптора 0 (ноль). В Windows это дескриптор файла 0 (ноль). Файловый дескриптор/дескриптор 0 по умолчанию подключен к консоли или tty, поэтому фактически он читает с клавиатуры. Однако его можно перенаправить, часто с помощью оболочки (например, bash или cmd.exe), используя следующий синтаксис:

myprog.py < input_file.txt 

Это изменяет нулевой файловый дескриптор для чтения файла вместо клавиатуры. В UNIX или Linux используется базовый вызов dup2(). Прочтите документацию по вашей оболочке для получения дополнительной информации о перенаправлении (или, может быть, man dup2, если вы смелы).

05.04.2015
  • В python 3 текстовый поток. 12.10.2018

  • 2

    Он читается из стандартного ввода и должен предоставляться клавиатурой в виде потоковых данных.

    Предоставление файла не требуется, однако вы можете использовать перенаправление для использования файла. в качестве стандартного ввода.

    В Python метод readlines() считывает весь поток, затем разбивает его по символу новой строки и создает список каждой строки.

    lines = sys.stdin.readlines()
    

    Вышеупомянутый создает список, называемый строками, где каждый элемент будет строкой (как определено символом конца строки).

    Подробнее об этом можно прочитать в разделе ввода и вывода руководства по Python.

    Если вы хотите запросить у пользователя ввод, используйте метод input() (в Python 2 используйте raw_input()):

    user_input = input('Please enter something: ')
    print('You entered: {}'.format(user_input))
    
    05.04.2015
  • Итак, как стандартный ввод читается по-другому, когда я использую sys.stdin.readlines() вместо sys.stdin. Доходит ли второй до каждого слова? Я все еще в замешательстве. 05.04.2015

  • 3

    Чтобы понять, как работает sys.stdin, выполните следующие действия:

    создайте простой скрипт на Python, назовите его «readStdin.py»:

    import sys
    lines = sys.stdin.readlines()
    print (lines)
    

    Теперь откройте консоль любого типа:

    echo "line1 line2 line3" | python readStdin.py
    

    Скрипт выводит:

    ['"line1 line2 line3" \n']
    

    Итак, скрипт прочитал ввод в список (с именем «линии»), включая новый символ строки, созданный «эхом». То есть.

    02.12.2018

    4

    По моему мнению, метод sys.stdin.read() принимает строку в качестве ввода от пользователя до специального символа, такого как Enter Key, за которым следует Ctrl + D, а затем сохраняет ввод в виде строки.

    Control + D работает как стоп-сигнал.

    Пример:

    import sys
    
    input = sys.stdin.read()
    print(input)
    tokens = input.split()
    a = int(tokens[0])
    b = int(tokens[1])
    print(a + b)
    

    После запуска программы введите два числа, разделенных пробелом, и после завершения нажмите Control + D один или два раза, и вы увидите сумму двух введенных значений.

    14.12.2018
  • Закончив ввод текста, нажмите Enter, а затем Ctrl+Z --› в Windows. 28.06.2020

  • 5
    for something in sys.stdin:
        some stuff here
    

    Приведенный выше код работает не так, как вы ожидаете, потому что sys.stdin — это дескриптор файла — это дескриптор файла для stdin. Он не дойдет до строки some stuff here

    lines = sys.stdin.readlines()
    

    Когда приведенный выше сценарий запускается в интерактивной оболочке, он блокирует выполнение до тех пор, пока пользователь не нажмет Ctrl-D, что означает конец ввода.

    05.04.2015
  • Итак, как стандартный ввод читается по-другому, когда я использую sys.stdin.readlines() вместо sys.stdin. Доходит ли второй до каждого слова? Я все еще в замешательстве. 05.04.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..