2012-01-02 12 views
6

से आउटपुट नहीं प्राप्त कर सकता है मुझे PHP स्क्रिप्ट से पाइथन स्क्रिप्ट निष्पादित करने में कोई समस्या है। मेरा क्लाइंट ब्लूहोस्ट का उपयोग करता है, इसलिए मैंने यहां वर्णित easy_install विधि के साथ पाइथन के लिए एक थर्ड पार्टी मॉड्यूल (numpy) स्थापित किया है: https://my.bluehost.com/cgi/help/530?step=530PHP स्क्रिप्ट पाइथन लिपि

मेरी समस्या का प्रदर्शन करने के लिए, मैंने दो पायथन स्क्रिप्ट और एक PHP स्क्रिप्ट बनाई है।

hello.py शामिल हैं:

print "Hello, World!" 

hello-numpy.py शामिल हैं:

import numpy 
print "Hello, World!" 

PHP स्क्रिप्ट शामिल हैं:

Output from exec('python hello.py'): <?php echo exec('python hello.py'); ?><br> 
Output from exec('python hello-numpy.py'): <?php echo exec('python hello-numpy.py'); ?><br> 
Output from exec('whoami'): <?php echo exec('whoami'); ?> 

मैं तो पीएचपी से उत्पादन मिलता है:

Output from exec('python hello.py'): Hello, World!
Output from exec('python hello-numpy.py'):
Output from exec('whoami'): venicetw

हालांकि, SSH खिड़की से इन स्क्रिप्ट चला निम्नलिखित परिणाम प्राप्त होते हैं:

# python hello.py 
Hello, World! 
# python hello-numpy.py 
Hello, World! 
# whoami 
venicetw 

ऐसा लगता है जब अजगर स्क्रिप्ट आयात Numpy पीएचपी किसी भी उत्पादन नहीं मिलता है, लेकिन यह SSH से ठीक काम करता है। इसके अलावा, PHP को hello.py के लिए 0 की वापसी स्थिति मिलती है लेकिन 1 हैलो- numpy.py के लिए। मैंने सोचा कि यह एक अनुमति मुद्दा हो सकता है, लेकिन PHP और SSH दोनों "venicetw" उपयोगकर्ता के रूप में चल रहे हैं। PHP और अपाचे को पायथन स्क्रिप्ट से आउटपुट प्राप्त करने से क्या रोका जाएगा? क्या यह कुछ है जो मैं ब्लूहोस्ट के साथ चर्चा कर सकता हूं, या कुछ और मुझे जांचना चाहिए? हम Apache 2.2.21, PHP 5.2.17, Python 2.4.3, और numpy 1.6.0 का उपयोग कर रहे हैं।

अद्यतन: SSH प्रिंट निम्नलिखित पायथन पथ:

/home8/venicetw/public_html/venicenoise/python 
/home8/venicetw/.local/lib/python2.4/site-packages/ogcserver-0.1.0-py2.4.egg 
/home8/venicetw/.local/lib/python2.4/site-packages/PIL-1.1.7-py2.4-linux-x86_64.egg 
/home8/venicetw/.local/lib/python2.4/site-packages/lxml-2.3.2-py2.4-linux-x86_64.egg 
/home8/venicetw/.local/lib/python2.4/site-packages/WebOb-1.2b2-py2.4.egg 
/home8/venicetw/.local/lib/python2.4/site-packages/PasteScript-1.7.5-py2.4.egg 
/home8/venicetw/.local/lib/python2.4/site-packages/PasteDeploy-1.5.0-py2.4.egg 
/home8/venicetw/.local/lib/python2.4/site-packages/Paste-1.7.5.1-py2.4.egg 
/home8/venicetw/.local/lib/python2.4/site-packages/numpy-1.6.0-py2.4-linux-x86_64.egg 
/home8/venicetw/.local/lib/python2.4/site-packages 
/home8/venicetw/.local/lib/python/site-packages 
/home8/venicetw/public_html/venicenoise/python 
/usr/lib64/python24.zip 
/usr/lib64/python2.4 
/usr/lib64/python2.4/plat-linux2 
/usr/lib64/python2.4/lib-tk 
/usr/lib64/python2.4/lib-dynload 
/usr/lib64/python2.4/site-packages 
/usr/lib64/python2.4/site-packages/Numeric 
/usr/lib64/python2.4/site-packages/PIL 
/usr/lib64/python2.4/site-packages/gtk-2.0 
/usr/lib/python2.4/site-packages 

लेकिन अपाचे केवल इन पायथन पथ प्रिंट:

/home8/venicetw/public_html/venicenoise/python 
/usr/lib64/python24.zip 
/usr/lib64/python2.4 
/usr/lib64/python2.4/plat-linux2 
/usr/lib64/python2.4/lib-tk 
/usr/lib64/python2.4/lib-dynload 
/usr/lib64/python2.4/site-packages 
/usr/lib64/python2.4/site-packages/Numeric 
/usr/lib64/python2.4/site-packages/PIL 
/usr/lib64/python2.4/site-packages/gtk-2.0 
/usr/lib/python2.4/site-packages 

समाधान: से क्रियान्वित/usr/bin/env तक PHP और SSH दोनों, मैं यह निर्धारित करने में सक्षम था कि PHP को पाइथन पथ के लिए एक पर्यावरण चर अनुपलब्ध था जहां numpy स्थापित है। इस मामले में,

putenv('PYTHONPATH=/home8/venicetw/.local/lib/python2.4/site-packages:/home8/venicetw/.local/lib/python/site-packages:'); 

PHP स्क्रिप्ट की शुरुआत में, सब कुछ अपेक्षित काम करता है।

उत्तर

5

यदि PHP को 1 की वापसी स्थिति मिलती है, तो यह इंगित करता है कि आपके द्वारा चलाई गई प्रक्रिया में एक त्रुटि आई है। (एक nonzero निकास स्थिति आमतौर पर यूनिक्स स्टाइल सिस्टम पर एक त्रुटि इंगित करता है। कुछ प्रोग्राम अलग हैं, उदाहरण के लिए, diff।) उपप्रोसेसर द्वारा उत्पादित stderr की जांच करने का प्रयास करें ताकि यह देखने के लिए कि कौन से त्रुटि संदेश मुद्रित किए गए हैं।

Output from exec('python hello-numpy.py'): 
    <?php echo exec('python hello-numpy.py 2>&1'); ?><br> 

2>&1 एक धारा में stderr और stdout गठबंधन करने के लिए खोल निर्देश देता है:

आप stderr इस तरह से दिखा सकते हैं। आप आमतौर पर ऐसा नहीं करना चाहते हैं, लेकिन यह त्रुटियों को देखना आसान बना सकता है।

अद्यतन: चूंकि आपको मिली त्रुटि ImportError: No module named numpy है, हम पाइथन के पथों को देखने का प्रयास कर सकते हैं। यह संभव है कि आपके सिस्टम पर कई पायथन इंस्टॉल हो जाएं, और यह भी संभव है कि अपाचे का पर्यावरण (रूट निर्देशिका, आदि) आपके द्वारा प्राप्त किए जाने वाले पर्यावरण से अलग है जब आप एसएसएच पर पाइथन चलाते हैं। दोनों परिवेशों में इस अजगर स्क्रिप्ट निष्पादित करने का प्रयास करें:

import sys, os 
for path in sys.path: 
    print path 
print 
print 'Root:', os.readlink('/proc/self/root') # Linux only 

उन रास्तों में से एक है, जहां numpy स्थापित किया गया है पर ले जाना चाहिए, और जब आप अपाचे में इसे चलाने शायद यह याद आ रही है। या शायद अपाचे प्रक्रिया में एक अलग रूट निर्देशिका है, जिसे पायथन प्रक्रिया द्वारा विरासत में प्राप्त किया जाएगा।

समाधान: अनुपलब्ध पर्यावरण चर। टिप्पणी देखो।

+0

आह, यह मिला: "आयात त्रुटि: कोई मॉड्यूल numpy नाम नहीं है" मुझे आश्चर्य है कि यह अपाचे को पुनरारंभ करने का मामला है? –

+0

सुनिश्चित करें कि आप दोनों बार एक ही पायथन संस्करण तक पहुंच रहे हैं। –

+0

बस चेक किया गया - वे दोनों पाइथन 2.4.3 तक पहुंच रहे हैं। और साझा होस्टिंग वातावरण में होने पर, अपाचे को पुनरारंभ करना एक विकल्प नहीं है। –

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