【问题标题】:Uncertainty about inputs输入的不确定性
【发布时间】:2012-11-30 17:21:28
【问题描述】:

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

有什么方法可以确定进程的标准输入是否处于活动状态以接受输入?

【问题讨论】:

  • 它让我想起了停机问题。我不认为你想要做的事情是可能的
  • 说.,.我正在通过 python 执行外部 pgm,如果外部程序要求输入,那么我的 python 脚本必须提示我输入并使用这些输入再次继续执行
  • 您目前如何运行外部程序?子进程? system?
  • @kevin subprocess.peopen
  • 您能否再解释一下您的要求?

标签: python stdout stdin


【解决方案1】:

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

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

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

【讨论】:

  • 是的,实际上由于随机输入,我无法将 pexpect 与我的 pgm 一起使用..所以我在这里发布了问题..
  • 输入提示的模式是否已知?只是他们随机出现的时间?
  • 模式未知.. 我试图让用户在我的脚本中键入一个 c 程序并在其中运行它自己.. 你能得到我吗?
  • 但这听起来你从一开始就在等待输入。除非您允许他们随时提交程序并运行并进行任何类型的输入。您将不得不在超时读取标准输入和超时读取标准输出之间交替
【解决方案2】:


假设控制台空闲 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)

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

【讨论】:

    猜你喜欢
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-14
    相关资源
    最近更新 更多