लाइटफोन के साथ अजगर सीजीआई स्क्रिप्ट में RPi.GPIO कैसे शामिल करें?


13

मैंने हाल ही में सीजीआई के माध्यम से लाइटटैप के साथ काम करने के लिए अजगर को स्थापित किया है ( यहां देखें )। लेकिन जिस मिनट में मैं RPi.GPIO को शामिल करता हूं , स्क्रिप्ट निष्पादित होना बंद हो जाती है (मैं मान रहा हूं क्योंकि कोई HTML आउटपुट नहीं मिलता है), लेकिन त्रुटि लॉग में कोई त्रुटि आउटपुट नहीं है ( /var/log/lighttpd/error.log)।

gpio.py

import RPi.GPIO as GPIO

print "<html>"
print "\t<head>"
print "\t\t<title>GPIO</title>"
print "\t</head>"
print "\t<body>"
print "\t\t<p>"
print "\t\t\tGPIO #17 status: "
print "\t\t</p>"
print "\t</body>"
print "</html>"

स्क्रिप्ट क्यों नहीं चल रही है? क्या इसकी वजह परमिशन है? निश्चित रूप से, पुस्तकालय सहित किसी विशेष अनुमति की आवश्यकता नहीं होनी चाहिए? स्क्रिप्ट में या त्रुटि लॉग में कोई त्रुटि आउटपुट क्यों नहीं है?


यह शामिल फ़ाइल या फ़ाइलों के स्थान के निम्नलिखित अनुमतियों / स्वामित्वों में से एक या दोनों होने की संभावना है। समस्या को ठीक करने के लिए सम्मिलित फ़ाइल को उसी निर्देशिका में ले जाने का प्रयास करें जिस फ़ाइल को आप चलाने का प्रयास कर रहे हैं और सुनिश्चित करें कि यह उसी उपयोगकर्ता के स्वामित्व में है जिस स्क्रिप्ट को आप चला रहे हैं। यदि यह समस्या को हल कर देता है तो हमें बताएं और हम आपको अनुमतियाँ / स्वामित्व सेट करने और खोज पथ शामिल करने पर आगे निर्देशित कर सकते हैं।
स्टीव रोबिलार्ड

मैं पायथन के साथ नौसिखिया हूं, क्या आरपीआई.जीपीओ एक वास्तविक फ़ाइल है (यह कहां है)? \ cgi-bin \ gpio.py का स्वामित्व pi: pi के पास है और www निर्देशिका के लिए अनुमतियां www-data: www-data हैं।
मार्क इंग्राम

ठीक है, GPIO पिन को नियंत्रित करने के लिए किसी भी फ़ाइल की आवश्यकता वाली चीजों की एक जोड़ी को रूट के रूप में चलाने की आवश्यकता होगी, (जो कि वेब के माध्यम से एक सुरक्षा छेद खोल देगा)। कहा जाता है कि अगर आप कमांड लाइन से काम करने के लिए स्क्रिप्ट प्राप्त करते हैं तो लाइटटैप और सीजीआई को रूट के रूप में चलाने के लिए प्रयास करने से पहले आपको किसी भी समस्या पर डीबग करना आसान होगा। RPI.GPIO मॉड्यूल इंस्टॉल करने के लिए इन निर्देशों का पालन करें learn.adafruit.com/… । क्या आपके पास कोई इलेक्ट्रॉनिक्स अनुभव है? क्या आप GPIO पिन के साथ क्या करने जा रहे थे
स्टीव Robillard

1
आह, मैंने अभी-अभी इसका परीक्षण किया है, और इसकी एक साधारण स्क्रिप्ट को import RPi.GPIO as GPIOवास्तव में मूल विशेषाधिकारों की आवश्यकता होती है! अब मुझे लगता है कि मुझे रूट के रूप में चलाने के लिए लाइटटैप प्राप्त करने की आवश्यकता है (यह सिर्फ एक घर परियोजना है)।
मार्क इंग्राम

जवाबों:


6

आप 'आयात RPi.GPIO' से पहले जोड़ने का प्रयास कर सकते हैं:

import sys 
sys.stderr = sys.stdout
try:
    import RPi.GPIO as GPIO
except Exception as e:
    print e

यह एक त्रुटि का निदान करने में मदद कर सकता है।

और अपने HTML आउटपुट से पहले इन पंक्तियों को जोड़ें:

print "Content-Type: text/html"     # HTML is following
print                               # blank line, end of headers

Http://docs.python.org/library/cgi.html देखें


6

Okertanov की सलाह का पालन करने के बाद, मुझे पता चला कि आप वास्तव RPi.GPIOमें एक अजगर CGI स्क्रिप्ट का उपयोग नहीं कर सकते क्योंकि इसे रूट एक्सेस की आवश्यकता होती है। मैंने gpioकमांड लाइन ऐप पर कॉल करके समस्या के चारों ओर काम किया, जो कि वायरिंगपीआई के हिस्से के रूप में शामिल है , इसे एक गैर-रूट खाते से कहा जा सकता है।

# Read the GPIO pin using the gpio application

import subprocess as s

def ReadGpio(pin) :
    process = s.Popen(["/usr/local/bin/gpio", "-g", "read", pin], stdout = s.PIPE)
    data, _ = process.communicate()

    data = str.replace(data, \r”, “”)
    data = str.replace(data, \n”, “”)

    return data

0

# पाइथन में एक टिप्पणी का मतलब है

महज प्रयोग करें

import RPi.GPIO as GPIO

अब आपको अनुमतियों की समस्या को हल करना होगा


क्षमा करें कि यह मेरी गलती थी, मैंने अपना कोड कॉपी कर लिया था, जिस पर उस लाइन ने टिप्पणी की थी। मैंने इसे मूल प्रश्न से हटा दिया है।
मार्क इंग्राम

0

यह ट्यूटोरियल पायथन की एक विशेष प्रति बनाने और इसे मूल उपयोगकर्ता विशेषाधिकार देने की सिफारिश करता है, जैसे:

//check current version
pi@raspberrypi /var/www $ ls -l /usr/bin/python
lrwxrwxrwx 1 root root 9 Jun  6  2012 /usr/bin/python -> python2.7

//copy and chmod
pi@raspberrypi /var/www $ sudo cp /usr/bin/python2.7 /usr/bin/pythonRoot
pi@raspberrypi /var/www $ sudo chmod u+s /usr/bin/pythonRoot

//check that new version has more priveledges
pi@raspberrypi /var/www $ ls -l /usr/bin/pythonRoot
-rwsr-xr-x 1 root root 2674528 Mar 17 18:16 /usr/bin/pythonRoot

और फिर, अपने CGI को बनाने के लिए, sudo nano /etc/lighttpd/lighttpd.confजहाँ भी आप जाते हैं , वहाँ जाकर .pyफाइलों को निर्देश दें और /usr/bin/python/नए से बदल दें /usr/bin/pythonRoot/

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.