Hướng dẫn php get data from python script - php lấy dữ liệu từ tập lệnh python

Có thể chạy tập lệnh Python trong PHP và chuyển các biến từ nhau không?

Show

Tôi có một lớp học các trang web cho dữ liệu theo một cách toàn cầu nhất định. Tôi muốn làm cho nó đi cụ thể hơn rất nhiều và đã có các tập lệnh Pythons cụ thể cho một số trang web.

Tôi đang tìm cách kết hợp những người trong lớp của tôi.

Truyền dữ liệu an toàn và đáng tin cậy giữa hai đều có thể? Nếu vậy thì khó khăn như thế nào để có được một cái gì đó như vậy?

Hướng dẫn php get data from python script - php lấy dữ liệu từ tập lệnh python

Lee Taylor

7.62116 Huy hiệu vàng33 Huy hiệu bạc48 Huy hiệu đồng16 gold badges33 silver badges48 bronze badges

hỏi ngày 27 tháng 12 năm 2012 lúc 0:30Dec 27, 2012 at 0:30

Hướng dẫn php get data from python script - php lấy dữ liệu từ tập lệnh python

2

Bạn thường có thể giao tiếp giữa các ngôn ngữ bằng cách sử dụng các định dạng ngôn ngữ chung và sử dụng stdinstdout để truyền đạt dữ liệu.

Ví dụ với PHP/Python bằng cách sử dụng đối số shell để gửi dữ liệu ban đầu qua JSON

PHP:

// This is the data you want to pass to Python
$data = array('as', 'df', 'gh');

// Execute the python script with the JSON data
$result = shell_exec('python /path/to/myScript.py ' . escapeshellarg(json_encode($data)));

// Decode the result
$resultData = json_decode($result, true);

// This will contain: array('status' => 'Yes!')
var_dump($resultData);

Python:

import sys, json

# Load the data that PHP sent us
try:
    data = json.loads(sys.argv[1])
except:
    print "ERROR"
    sys.exit(1)

# Generate some data to send to PHP
result = {'status': 'Yes!'}

# Send it to stdout (to PHP)
print json.dumps(result)

Đã trả lời ngày 27 tháng 12 năm 2012 lúc 0:41Dec 27, 2012 at 0:41

9

Bạn đang tìm kiếm "Giao tiếp giữa các chuyên gia" (IPC)-Bạn có thể sử dụng một cái gì đó như XML-RPC, về cơ bản cho phép bạn gọi một hàm trong một quy trình từ xa và xử lý bản dịch của tất cả các loại dữ liệu đối số giữa các ngôn ngữ (vì vậy bạn có thể Gọi hàm PHP từ Python hoặc ngược lại - miễn là các đối số thuộc loại được hỗ trợ)

Python có máy chủ XML-RPC tích hợp và máy khách

Thư viện PHPXMLRPC có cả máy khách và máy chủ

Có các ví dụ cho cả máy chủ và máy khách Python, và máy khách và máy chủ PHP

Đã trả lời ngày 27 tháng 12 năm 2012 lúc 1:22Dec 27, 2012 at 1:22

DBRDBRdbr

162K65 Huy hiệu vàng274 Huy hiệu bạc340 Huy hiệu đồng65 gold badges274 silver badges340 bronze badges

1

Chỉ có cùng một vấn đề và muốn chia sẻ giải pháp của tôi. (theo sát những gì Amadan gợi ý)

Python mảnh

import subprocess

output = subprocess.check_output(["php", path-to-my-php-script, input1])

Bạn cũng có thể làm: blah = input1 thay vì chỉ gửi một arg không tên ... và sau đó sử dụng $ _get ['blah'].

Php mảnh

$blah = $argv[1];



if( isset($blah)){

    // do stuff with $blah

}else{
    throw new \Exception('No blah.');
}

Đã trả lời ngày 28 tháng 8 năm 2013 lúc 17:08Aug 28, 2013 at 17:08

Đặt cược tốt nhất là chạy Python như một quy trình con và nắm bắt đầu ra của nó, sau đó phân tích nó.

$pythonoutput = `/usr/bin/env python pythoncode.py`;

Sử dụng JSON có thể sẽ giúp dễ dàng sản xuất và phân tích bằng cả hai ngôn ngữ, vì nó là tiêu chuẩn và cả hai ngôn ngữ đều hỗ trợ nó (tốt, ít nhất là các phiên bản không phân biệt). Trong Python,

json.dumps(stuff)

Và sau đó trong PHP

$stuff = json_decode($pythonoutput);

Bạn cũng có thể lưu rõ ràng dữ liệu dưới dạng tệp hoặc sử dụng ổ cắm hoặc có nhiều cách khác nhau để làm cho hiệu quả này (và phức tạp hơn) tùy thuộc vào kịch bản chính xác bạn cần, nhưng đây là đơn giản nhất.

Đã trả lời ngày 27 tháng 12 năm 2012 lúc 0:36Dec 27, 2012 at 0:36

AmadanamadanAmadan

184K23 Huy hiệu vàng229 Huy hiệu bạc288 Huy hiệu Đồng23 gold badges229 silver badges288 bronze badges

Đối với tôi, escapeshellarg(json_encode($data)) không chính xác là một chuỗi có định dạng JSON, mà là một cái gì đó như {name: carl, tuổi: 23}. Vì vậy, trong Python, tôi cần phải

import sys, json

# Load the data that PHP sent us
try:
    data = json.loads(sys.argv[1])
except:
    print "ERROR"
    sys.exit(1)

# Generate some data to send to PHP
result = {'status': 'Yes!'}

# Send it to stdout (to PHP)
print json.dumps(result)
0 không gian trắng để có được một số JSON thực sự và có thể sử dụng
import sys, json

# Load the data that PHP sent us
try:
    data = json.loads(sys.argv[1])
except:
    print "ERROR"
    sys.exit(1)

# Generate some data to send to PHP
result = {'status': 'Yes!'}

# Send it to stdout (to PHP)
print json.dumps(result)
1 trên đó.

Vấn đề là, khi ai đó nhập tên với không gian trắng trong đó như "CA RL".

Đã trả lời ngày 27 tháng 1 lúc 11:03Jan 27 at 11:03