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

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

for something in sys.stdin: some stuff here lines = sys.stdin.readlines() 

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

  • Проблема с sys.argv , когда модуль unittest находится в скрипте
  • Селен: Закройте скрипт Python без закрытия браузера
  • Python: Какая кодировка используется для обработки sys.argv?
  • Как импортировать файлы в python с помощью sys.path.append?
  • Захват stdout из скрипта в Python
  • Возможно ли записать объект фрейма python, возвращенный sys._getframe () из кода python, запущенного в интерпретаторе?
  • В чем разница между стеком и фреймом?
  • Установите LD_LIBRARY_PATH перед импортом в python
  • 3 Solutions collect form web for “Что читает sys.stdin?”

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

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

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

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

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

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

    Теперь sys.stdin – это еще один объект, который открывается Python перед sys.stdin вашей программы. То, что вы делаете с этим файловым объектом, зависит от вас, но на самом деле оно не отличается от любого другого файлового объекта, а именно, что вам не нужно 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 если вы храбры).

     for something in sys.stdin: some stuff here 

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

     lines = sys.stdin.readlines() 

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

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

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

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

     lines = sys.stdin.readlines() 

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

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

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

     user_input = input('Please enter something: ') print('You entered: {}'.format(user_input)) 
    Python - лучший язык программирования в мире.