2

解決済み:解決策----------------------------------------------- -----------------------------------

getimagesize()PHP標準ライブラリの関数をPythonスクリプトで実行したいと思います。関数には、Pythonから画像パスを渡す必要があります。

Pythonでphpスクリプトを実行する方法は知っていますが、Python-> PHPから引数を渡して、結果をPythonに戻す方法がわかりません。

これが私がPythonスクリプトに持っているものです:

def php_script_runner(script_path):
    p = subprocess.Popen(['php', script_path], stdout=subprocess.PIPE)
    result = p.communicate()[0]
    return result

これが私がPHPファイルに持っているものです(私はそれに引数を渡す方法がわかりません):

<?php getimagesize() ?>

'get_image_size.php'引数をに渡して、さらに処理するためにPythonで結果を返すにはどうすればよいですか?

このアイデアを他のカスタムPHP関数にさらに実装したいと思います。この質問の主な目的は、画像のサイズを見つけることだけでなく、将来的にphpを集中的に使用する他の関数にもこれを使用できるようにすることです。

これの主な目標は、以下を決定することです。

  1. PythonでPHPスクリプトを呼び出す方法
  2. PythonからPHPスクリプトにagrumentを送信する方法
  3. PHPスクリプトの出力を解析してPythonに戻す方法
4

3 に答える 3

3

Python Image Library、PIL を使用することの何が問題になっていますか?

from PIL import Image
im=Image.open(filepath)
print im.size # (height,width) tuple

画像のサイズを取得するために PHP スクリプトを呼び出すことは、まったく間違っています。両方のランタイムのインスタンスを起動することを正当化する、PHP が Python よりも優れていることは何も思いつきません :)

私のアドバイス: 一度に 1 つの言語に固執し、Python の標準ライブラリを学習してください :) PHP で実行できる場合、Python で何かを実行する際に問題が発生することはありません。

于 2013-03-06T16:26:52.650 に答える
3

これを行うことで解決: Python:

import subprocess
import json
import sys
import os

def php(script_path, argument):
    p = subprocess.Popen(['php', script_path, argument], stdout=subprocess.PIPE)
    result = p.communicate()[0]
    return result

image_dimensions_json =str(php("get_image_size.php", image_location_relative[1:]))
dic = json.loads(image_dimensions_json)
print str(dic["0"]) + "|" + str(dic["1"])

その理由は、[1:]何らかの理由でパスの「/」がエラーを引き起こすためです。削除すると問題が解決することがわかりました。

PHP:

<?php

echo(json_encode(getimagesize($argv[1])));

?>

echoまたはprint_r仕事。Python には標準ライブラリに組み込まれた json デコーダーがあるため、配列を JSON に変換するのは簡単であることがわかりました。

これが人々を助けることを願っています!この conecpt を使用して、より大きな PHP 関数を実装する予定です。

于 2013-03-06T17:58:43.753 に答える
2

私なら、Python の結果を JSON (または XML) オブジェクトとしてエコーし、PHP スクリプトでその情報を読み直します。可能であれば、これら 2 つの言語を 2 つの別個の Web ページに分割し、GETスタイル クエリ (別名 API スタイル) を介して Python にデータを返すことを強くお勧めします。

于 2013-03-06T15:47:39.130 に答える