Python - программа останавливается для чтения стандартного ввода

Я пишу скрипт на Python, который получает несколько параметров на стандартный ввод. Я использую функцию raw_input(), которая работает для первых параметров, но полностью зависает, когда я вызываю ее внутри цикла while.

Вот мой код:

def launch_trade(logger):
    Kerviel = Trader()
    param = raw_input() #Works fine
    Kerviel.Capital = float(param)
    param = raw_input() #Works fine
    Kerviel.NbDays = int(param)
    param = raw_input() #Works Fine
    while (param != '--end--'):
        Kerviel.action(float(param), logger)
        Kerviel.Cours.append(param)
        param = raw_input() #Here it infinite wait

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

Почему этот последний raw_input() не работает, когда параметры отправляются php-скриптом?

Спасибо за ваши ответы и извините за плохой английский.


person Gordon Amable    schedule 17.05.2016    source источник


Ответы (1)


Каждый вызов input или raw_input ожидает строку, оканчивающуюся на '\n'. Живой пользователь нажимает клавиши, оканчивающиеся на клавишу Enter. Программа должна отправлять строки на стандартный вывод, подключенный к стандартному вводу, заканчивающийся на «\n». Таким образом, проблема должна заключаться в том, что программа php отправляет недостаточно или не все, что она отправляет, попадает в вашу программу python. Если последнее, возможно, программе php необходимо «сбросить» стандартный вывод, чтобы передать последнюю строку в python. Когда файл закрыт, сброс выполняется автоматически, но стандартный вывод обычно не закрывается.

person Terry Jan Reedy    schedule 17.05.2016
comment
Проблема в том, что я не могу изменить ни одной строки в части PHP... Многие из нас работают с одним и тем же PHP-скриптом, и я единственный, у кого есть проблемы с вводом данных... Так что я могу быть уверен проблема исходит от меня. - person Gordon Amable; 17.05.2016
comment
Получают ли другие входные данные через канал? Или только из файла, написанного на php? - person Terry Jan Reedy; 17.05.2016
comment
Все они используют такие функции, как getline() (C++) или эквиваленты на многих разных языках. - person Gordon Amable; 18.05.2016