我是使用 php 和 python 的新手,但我有一项任务要尝试完成,而我的测试代码似乎不起作用。基本上我正在尝试将数据从 html 表单(使用 php)获取到 python 脚本进行处理。在查看了其他帖子中一些非常有用的东西之后,我决定使用管道。为了测试这个过程,我使用了以下代码。
php代码:
<?php
$pipe = fopen('Testpipe','r+');
fwrite($pipe, 'Test');
fclose($pipe);
?>
Python代码:
#!/usr/bin/env python
import os
pipeName = 'Testpipe'
try:
os.unlink(pipeName)
except:
pass
os.mkfifo(pipeName)
pipe = open(pipeName, 'r')
while True:
data = pipe.readline()
if data != '':
print repr(data)
当我运行 Python 代码时,我可以看到使用 ls -l 在目录中创建的管道,但是当我使用浏览器运行 php 脚本(我在树莓派上运行网络服务器)时,什么也没有发生。这让我有点困惑,因为我读过的大多数帖子都说明了管道是多么简单。我假设打开浏览器(通过服务器的 php 脚本)我应该看到文本出现在 python shell 中?
任何帮助,将不胜感激。
好吧,在我原来的帖子之后,我修改了我的原始代码,这要归功于大量的网络搜索和一些非常有用的 Python 教程。我现在有一些东西可以证明管道的原理,尽管我仍然需要解决 php 方面的问题,但我觉得我现在已经到了那里。修改后的代码如下:
import os,sys
pipe_name = 'testpipe'
def child():
pipeout = os.open(pipe_name, os.O_WRONLY)
while True:
time.sleep(1)
os.write(pipeout, 'Test\n')
def parent():
pipein = open(pipe_name, 'r')
while True:
line = pipein.readline()[:-1]
print 'Parent %d got "%s"' %(os.getpid(),line)
if not os.path.exists(pipe_name):
os.mkfifo(pipe_name)
pid = os.fork()
if pid != 0:
parent()
else:
child()
这让我走上了我想去的地方,所以希望它对有类似问题的人有用。