关于投入的不确定性

时间:2012-11-30 17:21:29

标签: python stdout stdin

我正在通过python执行外部程序,如果外部程序请求输入,那么我的python脚本必须提示我输入并继续执行这些输入...

有没有办法找出进程的标准输入是否处于活动状态以接受输入?

2 个答案:

答案 0 :(得分:0)

看看pexpect模块:
http://www.noah.org/wiki/pexpect

它允许您运行进程并等待某些模式,然后发送输入和读取结果。您需要知道您的期望并且可能需要等待某些超时,直到您收到输入提示。

如果您的程序在提示时完全随机,那将会复杂得多。

答案 1 :(得分:0)


假设控制台空闲10秒钟,它可能会等待输入
注意:并非总是这种情况,如果线程正在睡觉等...,
但为了简单起见,我假设了前者。

所以,

process=subprocess.Popen(['some_process_with_inputs'],shell=true,stdin=subprocess.PIPE)  
start = time.time()  
time_to_wait_for_idleness=10  
while 1:  
    ret=process.poll()  
    if ret == None and (time.time() - start) > time_to_wait_for_idleness:  
        #Waiting for input possibly.. Do things here ie.. process.communicate() 
    time.sleep(1)

只是一个建议,可能会帮助某人。感谢您的回复。