2013-11-05 16 views
7

Tôi đang viết một ứng dụng đơn giản sử dụng thông tin từ một biểu mẫu, chuyển nó qua $ _POST đến một tập lệnh PHP thực thi một kịch bản lệnh python và xuất kết quả. Vấn đề tôi đang gặp là kịch bản python của tôi không thực sự chạy với các đối số được thông qua trong tập tinThực thi Kịch bản Python với Biến PHP

process3.php:.

<?php 
    $start_word = $_POST['start']; 
    $end_word = $_POST['end']; 
    echo "Start word: ". $start_word . "<br />"; 
    echo "End word: ". $end_word . "<br />"; 
    echo "Results from wordgame.py..."; 
    echo "</br>"; 
    $output = passthru('python wordgame2.py $start_word $end_word'); 
    echo $output; 
?> 

Output:

Start word: dog 
End word: cat 
Results from wordgame.py... 
Number of arguments: 1 arguments. Argument List: ['wordgame2.py'] 

Ở phía trên của wordgame2.py của tôi, tôi có những điều sau đây (cho mục đích gỡ lỗi):

#!/usr/bin/env python 
import sys 
print 'Number of arguments:', len(sys.argv), 'arguments.' 
print 'Argument List:', str(sys.argv) 

Tại sao không phải là tê liệt er của các đối số được truyền = 3? (Có, biểu mẫu của tôi gửi dữ liệu chính xác.)

Bất kỳ trợ giúp nào được đánh giá cao!

Edit: Tôi có thể nói thêm rằng nó không chạy khi tôi dứt khoát nói với nó khi bắt đầu và kết thúc từ ... một cái gì đó như thế này:

$output = passthru('python wordgame2.py cat dog'); 
echo $output 
+0

Bạn thấy gì khi bạn 'echo 'python wordgame2.py $ start_word $ end_word'' trong tệp php của bạn? – GWW

+0

Sau khi thêm dòng đó, nó sẽ xuất ra: Từ bắt đầu: dog Từ kết thúc: cat Kết quả từ wordgame.py ... python wordgame2.py dog ​​cat Số đối số: 1 đối số. Danh sách đối số: ['wordgame2.py'] – Micah

+0

Tôi nghĩ rằng sai lầm nằm trong '$ output = passthru ('python wordgame2.py $ start_word $ end_word');' Thử cái này '$ output = passthru ('python wordgame2.py' . $ start_word. "".«Có lẽ, python là từ chối các đối số do $ keyword (hoặc có thể $ là gọi vỏ cho repplacement biến) –

Trả lời

9

Update -

Bây giờ tôi biết của PHP, sai lầm nằm trong việc sử dụng dấu nháy đơn '. Trong PHP, các chuỗi được trích dẫn đơn được coi là chữ, PHP không đánh giá nội dung bên trong nó. Tuy nhiên, hai chuỗi được trích dẫn là " được đánh giá và hoạt động như bạn mong đợi. Điều này được tóm tắt đẹp trong this SO answer. Trong trường hợp của chúng tôi,

$output = passthru("python wordgame2.py $start_word $end_word"); 

sẽ làm việc, nhưng sau đây sẽ không -

$output = passthru('python wordgame2.py $start_word $end_word'); 

Original câu trả lời -

Tôi nghĩ rằng sai lầm nằm ở

$output = passthru("python wordgame2.py $start_word $end_word"); 

Hãy thử số này

$output = passthru("python wordgame2.py ".$start_word." ".$end_word); 
+1

Sẽ không phải là giải pháp rõ ràng được sử dụng" thay vì '? Không cần phải nối khi "không biến nội suy. –

+0

Hmm ... không quen thuộc với php (không có gì cả), vì vậy chỉ có câu trả lời của tôi bắt đầu với * Tôi nghĩ ... * –

+1

Ngoài ra, có lẽ tốt để sử dụng 'escapeshellarg()' trên hai đối số được truyền vào khi ghép . – Terry

1

Cảm ơn sự đóng góp của bạn. Tôi đã tìm ra vấn đề của mình với bản sửa lỗi đơn giản này:

$command = 'python wordgame2.py ' . $start_word . ' ' . $end_word; 
$output = passthru($command); 

Để passthru xử lý đúng các biến php, cần phải nối vào chuỗi trước khi thực thi.

+2

Thay vì đăng câu trả lời của bạn, đó là câu trả lời của ashish, vui lòng chấp nhận câu trả lời của anh ấy. – aIKid

+0

Tôi đã đăng bài này trước khi tôi nhìn thấy câu trả lời của anh ấy. Hãy nhìn vào dấu thời gian. – Micah

+0

Trên thực tế, tôi đã trả lời 7 giây trước :) Câu trả lời là không cần thiết/chưa được xác minh. –

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