2010-04-28 43 views
8

Tôi đang gọi một tập lệnh python từ PHP.Gọi Python từ PHP và lấy mã trả lại

Chương trình python phải trả lại một số giá trị theo các đối số được truyền cho nó.

Dưới đây là một chương trình mẫu trăn, mà sẽ cung cấp cho bạn một ý tưởng cơ bản của những gì tôi hiện đang thực hiện:

#!/usr/bin/python 
import sys 

#get the arguments passed 
argList = sys.argv 

#Not enough arguments. Exit with a value of 1. 
if len(argList) < 3: 
    #Return with a value of 1. 
    sys.exit(1) 

arg1 = argList[1] 
arg2 = argList[2] 

#Check arguments. Exit with the appropriate value. 
if len(arg1) > 255: 
    #Exit with a value of 4. 
    sys.exit(4) 
if len(arg2) < 2: 
    #Exit with a value of 8. 
    sys.exit(8) 

#Do further coding using the arguments------ 

#If program works successfully, exit with a value of 0 

Như bạn có thể nhìn thấy từ đoạn mã trên, mục tiêu cơ bản của tôi là

  1. cho chương trình python trả lại một số giá trị (0,1,4,8 vv) tùy thuộc vào các đối số.
  2. Và sau đó gọi chương trình PHP để truy cập các giá trị trả lại này và thực hiện thao tác thích hợp.

Hiện tại tôi đã sử dụng "sys.exit (n)", cho mục đích đó.

Tôi có đang sử dụng sys.exit hay tôi cần sử dụng cái gì khác?

Và phương pháp nào tồn tại trong PHP để tôi có thể truy cập mã trả về từ python?

Xin lỗi cho câu hỏi dài, nhưng hy vọng nó sẽ giúp bạn hiểu được tình trạng khó xử của tôi

Nhờ một tấn

Trả lời

7

Trong PHP, bạn có thể thực hiện một lệnh và nhận mã trở lại sử dụng exec.

Các manual cho exec nói tham số thứ ba là một biến, trong đó các mã trả về sẽ được lưu trữ, ví dụ

exec('python blibble.py', $output, $ret_code); 

$ret_code sẽ là mã shell trở lại, và $output là một mảng của các dòng văn bản được in thành tiêu chuẩn. đầu ra.

Điều này dường như là cách sử dụng thích hợp cho mã trả lại từ những gì bạn mô tả, tức là 0 cho biết thành công và> 0 là mã cho nhiều loại lỗi khác nhau.

+0

Cảm ơn rất nhiều về hàm PHP (exec) để nhận các giá trị trả lại. Nhưng, tôi cũng cần xác nhận trên sys.exit (n). Giá trị (n) có được trả về "$ ret_code" không? Hoặc tôi nên sử dụng một cách khác để trở về và thoát khỏi chương trình python? Cảm ơn lần nữa – seaboy

+0

Chỉ cần xác nhận rằng sys.exit (n) trả về giá trị cho trình bao. Trong linux, nó có thể được xuất ra bởi "echo $?". Trong khi ở Windows: "echo% ERRORLEVEL%". Không thể xác nhận giá trị của nó trong "$ ret_code", nhưng nó đã giải quyết được phần trăn của vấn đề của tôi. Cảm ơn một lần nữa – seaboy

+0

Có, giá trị sys.exit phải được lưu trữ trong tham số mã trả về bằng lệnh exec của PHP. Tôi không biết về việc gọi Python, nhưng tôi sử dụng nó với Java và các lệnh khác mà tôi gọi thông qua phương thức này. – JAL

Các vấn đề liên quan