命名管道问题

时间:2013-08-25 09:36:35

标签: php python pipe named-pipes

我是使用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脚本时(我在覆盆子pi上运行web服务器)没有任何反应。它让我有点困惑,因为我读到的大多数帖子都说明了管道是如何简单的。我假设打开浏览器(通过服务器的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()

这让我走上了我想走的路,所以希望它可能对有类似问题的人有用。

1 个答案:

答案 0 :(得分:0)

尝试提供绝对路径(“/ tmp / TestPipe”)以确保两者都在查找同一文件。