Продолжить чтение на sys.stdin

Можно ли продолжить чтение ввода на sys.stdin? Я пытаюсь непрерывно выполнять функцию на основе ввода. (Моя функция печатает только sys.stdout и sys.stderr и ничего не возвращает.) Мой код:

def prime(number):
    number = abs(int(number))
    for i in range(3, number):
        if number % i == 0:
            print("Not Prime!", file = sys.stderr, flush = True)
            sys.exit(0)
    print("Prime!", file = sys.stdout, flush = True)

for i in sys.stdin:
    prime(i)

Вот результат:

>>> for i in sys.stdin:
        prime(i)
43         # Input
Prime!     # In sys.stdout and it continues reading from sys.stdin
55         # Input
Not Prime! # In sys.stderr and stops.
>>>

Я протестировал его и определил, что он продолжает чтение, когда вывод моей функции находится на sys.stdout, и останавливается при выводе на sys.stderr.


person Zizouz212    schedule 10.03.2015    source источник
comment
Просто чтобы убедиться: вы хотите вывести результат на свой терминал, а затем снова использовать его в качестве ввода? Если нет, то как выглядит вызов вашего скрипта? Как получить 43 и 55?   -  person BorrajaX    schedule 10.03.2015
comment
Итак, я использую IDLE и просто использую stderr и stdout для получения цветов. И код, который я использую для ввода данных в свою функцию, именно так выглядит в вопросе. Я внесу изменения в код моей функции.   -  person Zizouz212    schedule 10.03.2015


Ответы (1)


После того, как вы напечатаете «Not prime» для sys.stderr, вы сделаете вызов sys.exit, что приведет к завершению вашей программы. Если вы удалите это, чтение sys.stdin должно продолжаться до тех пор, пока вы не введете символ EOF (Ctrl+Z в Windows, Ctrl+D в POSIX).

person Jed Estep    schedule 10.03.2015