मेरे पास एक स्क्रिप्ट है जो सबप्रोसेस का उपयोग करके .exe खोलती है। मैं सोच रहा हूं कि क्या कोई तरीका है जिससे मैं बता सकता हूं कि .exe ने लॉन्चिंग कब समाप्त कर दी है?
मैं कुछ ऐसा ढूंढ रहा हूं:
import subprocess
subprocess.Popen(['myFile.exe'])
While myFile.exe is still opening:
# still loading, do nothing
print("exe finished opening")
मैंने यह जांचने के तरीके देखे हैं कि उपयोगकर्ता द्वारा .exe बंद कर दिया गया है, लेकिन यह वह नहीं है जिसे मैं ढूंढ रहा हूं।
धन्यवाद!
2 जवाब
टिप्पणियों में चर्चा के परिणामस्वरूप इसे जोड़ना।
लोडिंग के साथ समाप्त होने वाली आपकी exe मधुमक्खी की स्थिति का पता लगाने के लिए आपको उस स्थिति को कॉलिंग स्क्रिप्ट पर संकेत करने के लिए उपप्रोसेस की आवश्यकता है क्योंकि उस स्थिति का पता लगाने के लिए कोई सामान्य परिभाषा या तरीका नहीं है (उदाहरण के लिए निकास कोड के माध्यम से) आदि।)।
थोड़ा कच्चा लेकिन सबसे सरल उपाय यह भी हो सकता है कि अपने exe को एक परिभाषित स्ट्रिंग को stdout पर प्रिंट करने दें और ऊपर दिए गए सबप्रोसेस हैंडलर को सुनें।
जब आपके पास आपकी वांछित स्थिति (जीयूआई दृश्यमान या जो कुछ भी) तक पहुंचने के बाद आपका exe एक स्ट्रिंग प्रिंट करता है जैसे EXE Loaded.
stdout पर, आप तब मतदान करेंगे (या बेहतर तरीके से किसी प्रकार की async io सामग्री का उपयोग करें :)) कॉलिंग स्क्रिप्ट से सबप्रोसेस आउटपुट जैसे:
process = subprocess.Popen(['myFile.exe'], stdout=PIPE)
while True:
output = process.stdout.readline()
if process.poll() is not None and output == 'EXE Loaded.':
break
यह मूल रूप से लॉन्च किए गए exe के स्टडआउट को मतदान करेगा और ऐसा तब तक जारी रखेगा जब तक कि यह EXE Loaded.
स्ट्रिंग के रूप में प्राप्त न हो जाए। कृपया ध्यान रखें कि यह इसके पीछे के सबसे बुनियादी विचार की व्याख्या करेगा। एक वास्तविक उदाहरण में आप शायद किसी प्रकार की अधिक आधुनिक एसिंक्रोनस प्रतीक्षा सामग्री का उपयोग करेंगे। अन्य उत्तर में उल्लिखित run
फ़ंक्शन का उपयोग करने के बारे में भी सोचें। यह सलाह दी जाती है कि जब तक आप subprocess
के उच्च स्तरीय एपीआई के साथ देय नहीं कर सकते, तब तक सीधे POpen का उपयोग न करें।
यदि आपको subprocess.Popen
का उपयोग नहीं करना है, तो इसके बजाय subprocess.run
का उपयोग करने की अनुशंसा की जाती है। यदि आप इसके बजाय run
का उपयोग करते हैं, तो पाइथन स्क्रिप्ट run
जारी रखने से पहले वापस आने तक प्रतीक्षा करती है।
https://docs.python.org/3/library/subprocess.html#using-the-subprocess-module
यदि आपको किसी कारण से Popen
का उपयोग करना पड़े तो आप उदाहरण के लिए Popen.wait
पर कॉल कर सकते हैं, लेकिन मैं केवल run
का उपयोग करूंगा।
संबंधित सवाल
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।