Получение Raw_Input из системного сценария - PullRequest
0 голосов
/ 22 июля 2009

Я использую команду OS.System для вызова скрипта Python.

пример:

OS.System("call jython script.py")

В вызываемом мной скрипте присутствует следующая команда:

x = raw_input("Waiting for input")

Если я запускаю script.py из командной строки, я могу без проблем вводить данные, если я запускаю их с помощью автоматического подхода, я получаю EOFError. В прошлом я читал, что это происходит потому, что система ожидает, что компьютер будет работать, и поэтому никогда не сможет получать входные данные таким образом.

Итак, вопрос в том, как заставить Python ожидать ввода данных от пользователя при автоматическом запуске?

Ответы [ 2 ]

2 голосов
/ 22 июля 2009

Проблема в том, как вы запускаете свой дочерний скрипт. Поскольку вы используете os.system (), входной канал скрипта немедленно закрывается, и приглашение raw_input () достигает EOF (конец файла). И даже если бы этого не произошло, у вас не было бы способа фактически послать какой-нибудь входной текст ребенку, поскольку я предполагаю, что вы захотите, учитывая, что вы используете raw_input ().

Вместо этого следует использовать модуль подпроцесса .

import subprocess
from subprocess import PIPE

p = subprocess.Popen(["jython", "script.py"], stdin=PIPE, stdout=PIPE)
print p.communicate("My input")
0 голосов
/ 22 июля 2009

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

...