2013-11-05 8 views
7

मैं एक साधारण एप्लिकेशन लिख रहा हूं जो किसी फ़ॉर्म से जानकारी का उपयोग करता है, इसे एक PHP स्क्रिप्ट में $ _POST से गुजरता है जो एक पायथन स्क्रिप्ट निष्पादित करता है और परिणामों को आउटपुट करता है। समस्या मैं कर रहा हूँ कि मेरे अजगर स्क्रिप्ट वास्तव में बहस में पारित किया जा रहा से नहीं चल रहा है है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; 
?> 

आउटपुट:

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

के शीर्ष पर मेरे wordgame2.py, मेरे पास निम्नलिखित है (डीबगिंग उद्देश्यों के लिए):

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

धुंध क्यों नहीं है तर्क पारित किया जा रहा है = 3? (हां, मेरा फॉर्म डेटा सही तरीके से भेजता है।)

किसी भी मदद की बहुत सराहना की जाती है!

संपादित करें: मैं इस तरह है कि यह जब मैं स्पष्ट रूप से इसे आरंभ और समाप्ति शब्द बता चलता है जोड़ सकते हैं ... कुछ:

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

जब आप अपनी php फ़ाइल में python wordgame2.py $ start_word $ end_word'' 'echo' करते हैं तो आप क्या देखते हैं? – GWW

+0

कि लाइन को जोड़ने के बाद, यह अब आउटपुट: प्रारंभ शब्द: कुत्ते समाप्ति शब्द: बिल्ली wordgame.py से परिणाम ... अजगर wordgame2.py कुत्ता बिल्ली तर्कों की संख्या: 1 तर्क। तर्क सूची: ['wordgame2.py'] – Micah

+0

मुझे लगता है कि गलती '$ output = passthru ('python wordgame2.py $ start_word $ end_word') में है;' इस '$ output = passthru (' python wordgame2.py ' $ start_word। ""।$ end_word); 'शायद, पायथन $ कीवर्ड के कारण तर्कों को अस्वीकार कर रहा है (या हो सकता है कि $ परिवर्तनीय प्रतिस्थापन के लिए खोल का आह्वान कर रहा हो) –

उत्तर

9

अपडेट -

अब जब कि मैं वाकिफ हूँ PHP का, गलती एकल-उद्धरण ' का उपयोग करने में निहित है। PHP में, एकल उद्धृत तारों को शाब्दिक माना जाता है, PHP इसके अंदर की सामग्री का मूल्यांकन नहीं करता है। हालांकि, " तारों का डबल उद्धृत किया गया है और आप काम करेंगे जैसे काम करेंगे। यह this SO answer में खूबसूरती से संक्षेप में है। हमारे मामले में,

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

काम करेगा, लेकिन निम्नलिखित नहीं होगा -

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

मूल जवाब -

मुझे लगता है कि गलती

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

में निहित है इसे

01 आज़माएं
$output = passthru("python wordgame2.py ".$start_word." ".$end_word); 
+1

क्या स्पष्ट समाधान "इसके बजाए" उपयोग नहीं करेगा? "परिवर्तनीय करने पर" प्रक्षेप। –

+0

हम्म ... php (बिल्कुल भी नहीं) से बहुत परिचित नहीं है, इसलिए केवल मेरा जवाब शुरू होता है * मुझे लगता है ... * –

+1

इसके अलावा, संभवत: संगत होने पर पारित दो तर्कों पर 'escapeshellarg()' का उपयोग करना अच्छा होता है । – Terry

1

आपके योगदान के लिए धन्यवाद। मैं इस सरल ठीक से पता लगा है मेरी समस्या:

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

passthru ठीक से php चर संभाल करने के लिए आदेश में, यह निष्पादित करने से पहले स्ट्रिंग में concatenated की जरूरत है।

+2

अपना उत्तर पोस्ट करने के बजाय, जो आशीष के उत्तर है, कृपया उसका उत्तर स्वीकार करें। – aIKid

+0

मैंने अपना जवाब देखने से पहले इसे पोस्ट किया था। कृपया समय टिकट देखें। – Micah

+0

असल में, मैंने 7 सेकंड पहले जवाब दिया :) डाउनवोट अनावश्यक/असत्यापित था। –

संबंधित मुद्दे