मैं सभी गुस्से आप फिर से करने की कोशिश कर से प्राप्त होने की संभावना हो बाईपास होगा बनाता है अपने आप को छोड़ दो और इसे पर्यावरण के हाथों में छोड़ दें।
कि करके, मेरा मतलब है:
एक नियंत्रित प्रोग्राम है जो एक से अधिक अपने कार्यक्रम एक पाश में (एक ही मानकों यह दिया गया था) के साथ चलाने जबकि अपने कार्यक्रम के लिए एक विशिष्ट "पुनः आरंभ के साथ बाहर निकल जाता है कुछ नहीं करता है "कोड। यह cmd
फ़ाइल के रूप में सरल हो सकता है या एक अन्य (बहुत सरल) पायथन प्रोग्राम के रूप में जटिल हो सकता है जो os.system
का उपयोग करता है)। असल में, जब तक कि नियंत्रण प्रोग्राम कोड को "पुनरारंभ" प्राप्त करता है, यह आपके प्रोग्राम को बिल्कुल उसी पैरामीटर के साथ फिर से चलाएगा। कोई अन्य कोड इसे उस कोड से बाहर निकलने का कारण बनता है।
जब आप पूरी तरह से बाहर निकलना चाहते हैं, तो अपने वास्तविक पायथन प्रोग्राम को वापसी कोड 0 (या कुछ भी जो त्रुटि स्थिति में "पुनरारंभ" कोड नहीं है) के साथ बाहर निकलें।
यदि आप बस अपने प्रोग्राम के दूसरे पुनरावृत्ति (उदाहरण के लिए कॉन्फ़िगर को दोबारा पढ़ने के लिए) चक्र करना चाहते हैं, तो नियंत्रण प्रोग्राम द्वारा मान्यता प्राप्त "पुनरारंभ" कोड से बाहर निकलें।
लेकिन आप अपने आवेदन को फिर से इंजीनियरिंग के बारे में भी सोचना चाहेंगे ताकि वह किसी भी समय अपनी कॉन्फ़िगरेशन को फिर से पढ़ सके। इससे पूरी समस्या दूर हो जाएगी। आप उल्लेख नहीं करते कि यह एक विकल्प क्यों नहीं है इसलिए मुझे लगता है कि आपके पास कुछ कारण है कि यह क्यों काम नहीं करेगा।
लेकिन, यदि आप नहीं करते हैं, तो वह रास्ता है जिसे मैं चुन रहा हूं।
पहला विकल्प के लिए कुछ नमूना कोड प्रदान करने के लिए (यह विंडोज पर है, लेकिन Cygwin के तहत - एक ही बुनियादी नियमों विंडोज देशी अजगर के लिए आवेदन करना चाहिए लेकिन आप os.system
से वापसी मान की जाँच करनी चाहिए) .:
> cat phase1.py
#!/usr/bin/python
import os
status = 9
while status == 9:
status = int(os.system ("./phase2.py")/256) # exit code is upper 8 bits
print "Controller: %d"%(status)
> cat phase2.py
#!/usr/bin/python
import sys
import time
time.sleep(1)
val = int(time.time())%10
if val == 0:
rc = 0
else:
rc = 9
print "Program: %d -> %d"%(val,rc)
sys.exit(rc)
> ./phase1.py
Program: 2 -> 9
Controller: 9
Program: 3 -> 9
Controller: 9
Program: 4 -> 9
Controller: 9
Program: 5 -> 9
Controller: 9
Program: 7 -> 9
Controller: 9
Program: 8 -> 9
Controller: 9
Program: 9 -> 9
Controller: 9
Program: 0 -> 0
Controller: 0
आप प्रोग्राम को फिर से चलाने के लिए यह तय करने के लिए 9 के निकास कोड का उपयोग कर नियंत्रक को देख सकते हैं। कार्यक्रम स्वयं एक गूंगा है जो 9 लौटाता है जब तक कि यह 10-सेकंड एकाधिक पर न हो।
यूनिक्स पृष्ठभूमि प्रक्रियाओं पर आमतौर पर सिग्नल हैंडलर का उपयोग करें, पायथन में सिग्नल मॉड्यूल देखें। आप संभवतः विंडोज – Anycorn
से संबंधित कर सकते हैं: [क्या स्क्रिप्ट के भीतर पायथन-ओ (ऑप्टिमाइज़) ध्वज सेट करना संभव है?] (http://stackoverflow.com/q/7527055/4279) – jfs