में subprocess.Popen() का उपयोग कर एक पायथन स्क्रिप्ट निष्पादित करना मैंने थोड़ा सा देखा है लेकिन मुझे लगता है कि मैं इस समस्या को हल नहीं कर सकता। मैं अपने django ऐप के दृश्य में एक पायथन लिपि निष्पादित करना चाहता हूं। मैंने कोड को रखा है जिसे मैं django प्रबंधन कमांड के अंदर निष्पादित करना चाहता हूं ताकि इसे कमांड लाइन python manage.py command-name
के माध्यम से एक्सेस किया जा सके। मैंने फिर subprocess.Popen("python manage.py command-name",shell=True)
का उपयोग करके इस कमांड को चलाने का प्रयास किया।एक django दृश्य
हालांकि, इस आदेश को निष्पादित करने में कुछ समय लग सकता है, इसलिए मैं दृश्य को जारी रखना चाहता हूं और स्क्रिप्ट को पृष्ठभूमि में निष्पादित करने की अनुमति देता हूं। का उपयोग करते हुए subprocess.Popen अकेले जब तक स्क्रिप्ट समाप्त हो गया है लटका दृश्य पैदा कर रहा है, तो मैं एक धागा (another एसए सवाल के बाद) उपयोग करने की कोशिश:
class SubprocessThread(threading.Thread):
def __init__(self, c):
self.command = c
self.stdout = None
self.stderr = None
threading.Thread.__init__(self)
def run(self):
p = subprocess.Popen(self.command,
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
self.stdout, self.stderr = p.communicate()
और फिर इसे क्रियान्वित:
t = SubprocessThread("python manage.py command-name")
t.setDaemon(True)
t.start()
t.join()
हालांकि, दृश्य अभी भी लटकता है: कर्सर में एक व्यस्त प्रतीक है और पृष्ठ पर AJAX लोड नहीं होता है। अन्यथा पृष्ठ का एचटीएमएल सामान्य रूप से समाप्त होने के बाद (स्क्रिप्ट खत्म होने से पहले) थ्रेड कॉल के बाद दृश्य में ठीक और कमांड को लोड करने लगता है। क्या कोई मेरी सहायता कर सकता है? मैं स्क्रिप्ट को निष्पादित करना चाहता हूं और पृष्ठ पर दृश्य या AJAX कॉल किए बिना अपनी खुद की चीज़ करना चाहता हूं।
मैं नियमित रूप से (एक 'subprocess' साथ क्योंकि एक' thread' मार दिया जाता है जब दृश्य समारोह बाहर निकलता है) एक समान पैटर्न का उपयोग, और मैं नियमित रूप से कुछ वापस जाने के लिए भूल जाते हैं ब्राउज़र को लटकाने, फ़ंक्शन देखें। फिर, मैं subporcess को दोषी ठहराता हूं, जबकि मैं सिर्फ 'HttpResponse' वापस करने के लिए भूल गया था। जांच करे! – Dunatotatos