私は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()
これにより、私が行きたい場所への道を歩むことができたので、同様の質問をしている誰かに役立つことを願っています.