2012-01-20 9 views
12

से बाहर निकलें मैं पाइथन प्रोग्राम की एक जोड़ी का उपयोग कर रहा हूं, जिसमें से एक को दूसरा कॉल करना चाहिए।डाइमन के रूप में एक अजगर उपप्रोसेस को कॉल करें और

लेकिन यह इस तरह से किया जाना चाहिए कि पहला प्रोग्राम दूसरे को एक डिमन (या पृष्ठभूमि प्रक्रिया में चल रहा है) बनाता है, फिर दूसरे प्रोग्राम को समाप्त होने के इंतजार किए बिना बाहर निकलता है।

क्या यह पाइथन में संभव है?

मैं os.fork, उपप्रक्रिया मॉड्यूल को देखकर किया गया है, लेकिन मैं काफी सही तरीका इस लक्ष्य को हासिल करने के लिए के रूप में उलझन में हूँ ...

उत्तर

10

आप इस के लिए subprocess.Popen उपयोग कर सकते हैं:

import subprocess 

cmd = ['/usr/bin/python', '/path/to/my/second/pythonscript.py'] 
subprocess.Popen(cmd) 

आप stdout और stderr कहीं भी रीडायरेक्ट करना चाहते हैं, तो आप stdout=<file_obj> को Popen कन्स्ट्रक्टर में पास करके ऐसा कर सकते हैं।

+1

तो, इसके अनुसार, 'daemon_process' को '/ usr/bin/pyton /path/to/my/second/pythonscript.py' जैसे किसी चीज़ के बराबर बनाया जाना चाहिए? –

+0

@JavierNovoaC। 'पॉपन' तर्कों की एक सूची लेता है। मैं स्पष्टीकरण के लिए अपना जवाब संपादित करूंगा। –

+0

धन्यवाद! जो काम करता है;) –

3

एक "डेमॉन" में "पृष्ठभूमि प्रक्रिया" की तुलना में अधिक विशिष्ट परिभाषा होती है। डिफ़ॉल्ट रूप से Popen एक उपप्रोसेसर निष्पादित करेगा और चलने के लिए आपके प्रोग्राम पर नियंत्रण वापस देगा। हालांकि, यह सिग्नल से निपटने के बारे में कुछ भी नहीं कहता है (विशेष रूप से, अगर आपकी पृष्ठभूमि प्रक्रिया समाप्त होने से पहले उपयोगकर्ता अपना खोल छोड़ देता है) या Popen पर आने वाले समय में stdin, stderr, stdout और किसी अन्य फ़ाइल डिस्क्रिप्टर से डिस्कनेक्ट हो रहा है। यदि आप वास्तव में मतलब है कि आप एक डिमन चाहते हैं, तो आपको पीईपी 3143 के कार्यान्वयन python-daemon मॉड्यूल का उपयोग करना चाहिए। यह उन सकल हिस्सों का ख्याल रखता है जिनके बारे में आप नहीं सोचना चाहते हैं।

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