我有一个非常简单的金字塔应用程序,它提供一个简单的静态页面。我们假设其名称为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?
答案 0 :(得分:0)
我的猜测是pexpect.spawn返回的孩子需要沟通。 它试图写但没有人读,所以应用程序停止。 (我只是在猜测。)
如果您没有任何理由使用pexpect(如果您不与子进程通信则可能没有),为什么不进入标准模块子进程?