मैं वर्तमान में अपना पहला पायथन प्रोग्राम (पायथन 2.6.6 में) लिख रहा हूं। कार्यक्रम उपयोगकर्ता के सामान्य आदेश प्रदान करने वाले सर्वर पर चल रहे विभिन्न अनुप्रयोगों को शुरू करने और रोकने की सुविधा प्रदान करता है (जैसे कि लिनक्स सर्वर पर सिस्टम सेवाओं को प्रारंभ करना और रोकना)।मैं प्रक्रिया कैसे शुरू कर सकता हूं और इसे अजगर में पृष्ठभूमि में रख सकता हूं?
मैं, द्वारा
p = subprocess.Popen(startCommand, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output, err = p.communicate()
print(output)
समस्या है अनुप्रयोगों 'स्टार्टअप स्क्रिप्ट शुरू कर रहा हूँ कि एक आवेदन के स्टार्टअप स्क्रिप्ट अग्रभूमि में रहता है और इसलिए p.communicate() हमेशा के लिए इंतजार कर रहा है। मैंने शुरूआत के सामने "नोहप स्टार्ट कमांड &" का उपयोग करने की कोशिश की है लेकिन यह अपेक्षा के अनुसार काम नहीं करता है।
समाधान के लिए मैं अब निम्नलिखित बैश स्क्रिप्ट का उपयोग अनुप्रयोग की शुरुआत स्क्रिप्ट कॉल करने के लिए:
#!/bin/bash
LOGFILE="/opt/scripts/bin/logs/SomeServerApplicationStart.log"
nohup /opt/someDir/startSomeServerApplication.sh >${LOGFILE} 2>&1 &
STARTUPOK=$(tail -1 ${LOGFILE} | grep "Server started in RUNNING mode" | wc -l)
COUNTER=0
while [ $STARTUPOK -ne 1 ] && [ $COUNTER -lt 100 ]; do
STARTUPOK=$(tail -1 logs/SomeServerApplicationStart.log | grep "Server started in RUNNING mode" | wc -l)
if ((STARTUPOK)); then
echo "STARTUP OK"
exit 0
fi
sleep 1
COUNTER=$(($COUNTER + 1))
done
echo "STARTUP FAILED"
बैश स्क्रिप्ट मेरे अजगर कोड से कहा जाता है। यह कामकाज सही काम करता है लेकिन मैं सभी को पाइथन में करना पसंद करूंगा ...
उपप्रोसेसर है। गलत तरीके से खोलें? मैं केवल अपने पायथन में अपना काम कैसे जमा कर सकता हूं?
शायद http://stackoverflow.com/questions/1196074/starting- ए-बैकग्राउंड-प्रोसेस-इन-पायथन – daTokenizer
जरूरी होने पर बस 'संवाद' का उपयोग करें .. आपको परिणामों की जांच करने की आवश्यकता नहीं है? बस इसे छोड़ दें ... – klashxx
@klashxx: मुझे परिणामों की आवश्यकता है। यह मेरी समस्या है ... ("रनिंग मोड में सर्वर शुरू हुआ" के लिए आउटपुट की जांच करने की आवश्यकता है ...) – Ronzo