Чтение из файла с sys.stdin в Pycharm

Я пытаюсь проверить простой код, который читает файл по строкам с помощью Pycharm.

for line in sys.stdin: name, _ = line.strip().split("\t") print name 

У меня есть файл, который я хочу ввести в тот же каталог: lib.txt

Как я могу отлаживать свой код в Pycharm с входным файлом?

4 Solutions collect form web for “Чтение из файла с sys.stdin в Pycharm”

Вам нужно создать настраиваемую конфигурацию запуска, а затем добавить файл в качестве аргумента в поле «Параметры сценария». См. Интерактивную справку Pycharm для пошагового руководства.

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

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

 import argparse parser = argparse.ArgumentParser() parser.add_argument("filename", help="The filename to be processed") args = parser.parse_args() if args.filename: with open(filename) as f: for line in f: name, _ = line.strip().split('\t') print(name) 

Вы можете обойти эту проблему, если используете модуль fileinput, а не пытаетесь напрямую прочитать stdin.

С fileinput, если скрипт получает имя файла в аргументах, он будет читать из аргументов по порядку. В вашем случае замените свой код выше:

 import fileinput for line in fileinput.input(): name, _ = line.strip().split("\t") print name 

Самое замечательное в fileinput заключается в том, что он по умолчанию имеет значение stdin, если аргументы не заданы (или если указан аргумент «-»).

Теперь вы можете создать конфигурацию запуска и указать имя файла, который хотите использовать как stdin, в качестве единственного аргумента для вашего скрипта.

Подробнее о fileinput читайте здесь.

Я пытаюсь найти способ использования файла чтения в качестве stdin в PyCharm. Тем не менее, большинство ребят, включая мозг струй, сказали, что нет никакой возможности и никакой поддержки, это особенность командной строки, которая не связана с самим PyCharm. * https://intellij-support.jetbrains.com/hc/en-us/community/posts/206588305-How-to-redirect-standard-input-output-inside-PyCharm-

На самом деле, эта функция, считывающая файл как stdin, для меня как-то существенно облегчает предоставление входных данных для решения проблемы программирования из хакерканка или acmicpc.

Я нашел простой способ. Я могу использовать input () для получения stdin из файла!

 import sys sys.stdin = open('input.in', 'r') sys.stdout = open('output.out', 'w') print(input()) print(input()) 

input.in пример:

 hello world This is not the world ever I have known 

output.out пример:

 hello world This is not the world ever I have known 

Для гибкости вы можете написать свой скрипт python, чтобы всегда читать из stdin, а затем использовать перенаправление команд для чтения из файла:

 $ python myscript.py < file.txt 

Однако, насколько я могу судить, вы не можете использовать перенаправление от PyCharm, поскольку Run Configuration не позволяет этого.

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

 $ python myscript.py file.txt 

Есть несколько способов справиться с этим. Я думаю, что argparse является излишним для этой ситуации. Кроме того, вы можете обращаться к аргументам командной строки напрямую с помощью sys.argv :

 import sys filename = sys.argv[1] with open(filename) as f: for line in f: name, _ = line.strip().split('\t') print(name) 

Для надежного кода вы можете проверить правильность количества аргументов.

  • aysncio не может читать stdin в Windows
  • Как вы читаете stdin на Python?
  • Подключение к подпроцессу stdin to pipe
  • «Псевдотерминал не будет выделен, потому что stdin не является терминалом» при запуске ssh через python без paramiko
  • Python читает из аргументов командной строки или stdin
  • Python Чтение из Stdin с аргументами
  • Почему мне нужно дважды нажать Ctrl + D, чтобы закрыть stdin?
  • Как наследовать stdin и stdout в python с помощью os.execv ()
  • Python - лучший язык программирования в мире.