为什么我的简单金字塔应用程序无法与pexpect一起使用?

时间:2015-05-11 08:30:42

标签: python pyramid pexpect

我有一个非常简单的金字塔应用程序,它提供一个简单的静态页面。我们假设其名称为mypyramid,并使用端口9999

如果我手动在另一个Linux控制台中启动 mypyramid ,那么我可以使用以下代码打印出html字符串。

if __name__ == "__main__":
    import urllib2
    print 'trying to download url'
    response = urllib2.urlopen('http://localhost:9999/index.html')
    html = response.read()
    print html

但我想自动在应用程序中启动 mypyramid

所以在我的另一个应用程序中,我使用pexpect启动 mypyramid ,然后尝试从http://localhost:9999/index.html获取html字符串。

def _start_mypyramid():
    p = pexpect.spawn(command='./mypyramid')
    return p

if __name__ == "__main__":
    p = _start_mypyramid()
    print p
    print 'mypyramid started'
    import urllib2
    print 'trying to download url'
    response = urllib2.urlopen('http://localhost:9999/index.html')
    html = response.read()
    print html

似乎 mypyramid 已使用pexpect成功启动,因为我可以看到该过程的打印并且已达到mypyramid started

但是,应用程序在trying to download url之后只是挂起,我无法获取任何内容。

解决方案是什么?我的意思是我认为pexpect会创建另一个进程。如果这是真的,那么为什么它会停止检索html?

1 个答案:

答案 0 :(得分:0)

我的猜测是pexpect.spawn返回的孩子需要沟通。 它试图写但没有人读,所以应用程序停止。 (我只是在猜测。)

如果您没有任何理由使用pexpect(如果您不与子进程通信则可能没有),为什么不进入标准模块子进程?