通过PHP将服务器端.exe的输出流到本地Python中
在这种情况下,我在本地运行Python脚本,并使用通过PHP将服务器端.exe的输出流到本地Python中,php,python,Php,Python,在这种情况下,我在本地运行Python脚本,并使用f=urllib.urlopen()查询服务器并传递一些参数。服务器端的PHP脚本接受参数,检查参数,并使用passthru()命令将其传递给可执行文件。可执行文件运行,然后将输出传递回客户端,在客户端使用response=f.read()读取。然后打印响应 这是可行的,但是在进程结束时,输出返回到一个大的块中。我想做的是让在线可执行文件的输出在python终端本地运行时打印出来。有人知道在这里采取什么好方法吗?我已经尝试了f:print lin
f=urllib.urlopen()
查询服务器并传递一些参数。服务器端的PHP脚本接受参数,检查参数,并使用passthru()
命令将其传递给可执行文件。可执行文件运行,然后将输出传递回客户端,在客户端使用response=f.read()
读取。然后打印响应
这是可行的,但是在进程结束时,输出返回到一个大的块中。我想做的是让在线可执行文件的输出在python终端本地运行时打印出来。有人知道在这里采取什么好方法吗?我已经尝试了f:print line中的行,但它给出了与以前相同的行为 表示“如果size参数被省略或为负数,则read()方法可能直到数据流结束时才读取;在一般情况下,没有很好的方法确定套接字中的整个流已被读取。”
因此,您可以尝试一次处理一个字符,如下所示:
line = ''
while True:
char = f.read(1)
if not char:
break
elif char == '\n':
print line
line = ''
else:
line += char
# or a tidier form based on
# http://bob.ippoli.to/archives/2005/06/14/python-iterators-and-sentinel-values/
line = ''
for char in iter(lambda: f.read(1), ''):
if char == '\n':
print line
line = ''
else:
line += char
你试过冲水吗?这听起来像是PHP脚本一次将一个大数据块中的数据转储到输出中,更改PHP脚本不是更好吗?当您通过web浏览器访问url时,服务器是否将命令输出流化?如果PHP脚本在发送之前收集了所有输出,那么您需要修复PHP脚本。但是,如果它已经对数据进行了流式处理,那么您可以使用我下面的答案来处理传入的流式数据。对于PHP脚本,我改为使用popen而不是passthrough,并且必须强制执行无缓冲: