0

私は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 シェルにテキストが表示されるはずです。

どんな助けでも大歓迎です。

元の投稿に加えて、ネットでの多くのトロールといくつかの非常に役立つ 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()

これにより、私が行きたい場所への道を歩むことができたので、同様の質問をしている誰かに役立つことを願っています.

4

1 に答える 1