2009-07-21 2 views
0

Я использую команду OS.System для вызова сценария python.Извлечение Raw_Input из сценария запуска системы

пример:

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

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

x = raw_input("Waiting for input") 

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

Итак, вопрос в том, как я могу заставить python ждать ввода пользователя при автоматическом запуске?

ответ

0

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

2

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

Вместо этого вы должны использовать subprocess module.

import subprocess 
from subprocess import PIPE 

p = subprocess.Popen(["jython", "script.py"], stdin=PIPE, stdout=PIPE) 
print p.communicate("My input") 
Смежные вопросы