Использование sys.stdin.readline() для чтения нескольких строк из cmd в Python
Я хотел бы ввести свой ввод из командной строки после запуска
if __name__ == "__main__":
data = list(map(int, sys.stdin.readline().split()))
print(data)
n, capacity = data[0:2]
values = data[2:(2 * n + 2):2]
weights = data[3:(2 * n + 2):2]
Пример ввода может быть:
2 40
20 2
30 3
Мои вопросы:
1) Как создать список данных, используя мой ввод?
2) Как я могу сообщить Python, что я закончил ввод, и он должен выполнить остальную часть кода?
2 ответа
Решение этой проблемы зависит от используемой вами ОС.
По сути, если вы хотите многострочный ввод, вам придется использовать sys.stdin.read()
вместо sys.stdin.readline()
, поскольку sys.stdin
файловый объект в Python, read()
Метод будет читать, пока не достигнет конца файла. Он отмечен специальным символом EOF
(Конец файла). На разных ОС есть разные способы отправки.
В Windows:
Нажмите Ctrl+Z после ввода и затем нажмите Enter:
2 10
20 2
30 3
^Z
На ОС Unix:
Нажмите Ctrl+D после ввода. Вход не требуется (я считаю)
Если вы хотите получить список [2, 10, 20, 2, 30, 3]
с вашего вклада, вы в порядке. split()
метод разбивается по пробелам (пробелы, переводы строк и т. д.).
Если вы работаете в Windows, убедитесь, что вы завершили ввод новой строкой, иначе ^Z (от нажатия Ctrl-Z) будет включено в ваш ввод. Также убедитесь, что вы используете макет на английском языке - /questions/14266295/kak-zavershit-vvod-sysstdinreadlines/14266302#14266302
Я согласен со всем, что сказал Лева7. Тем не менее, я бы предложил другое решение, которое заключается в использовании raw_input
для Python 2 или input
для Python 3 вроде так:
args = []
s = raw_input() # input() for Python 3
while s != '':
args.extend([int(arg) for arg in s.strip().split()])
s = raw_input()
Конечно, это ни в коем случае не однострочник, но он делает свою работу, и легко увидеть, как это делается. Кроме того, никаких специальных символов не требуется в конце ввода.