मेरे पास एक स्क्रिप्ट है जो सबप्रोसेस का उपयोग करके .exe खोलती है। मैं सोच रहा हूं कि क्या कोई तरीका है जिससे मैं बता सकता हूं कि .exe ने लॉन्चिंग कब समाप्त कर दी है?

मैं कुछ ऐसा ढूंढ रहा हूं:

import subprocess

subprocess.Popen(['myFile.exe'])

While myFile.exe is still opening:

    # still loading, do nothing

print("exe finished opening")

मैंने यह जांचने के तरीके देखे हैं कि उपयोगकर्ता द्वारा .exe बंद कर दिया गया है, लेकिन यह वह नहीं है जिसे मैं ढूंढ रहा हूं।

धन्यवाद!

0
Jason Ellis 26 मई 2021, 09:28

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 का उपयोग न करें।

0
FloWil 27 मई 2021, 10:24

यदि आपको subprocess.Popen का उपयोग नहीं करना है, तो इसके बजाय subprocess.run का उपयोग करने की अनुशंसा की जाती है। यदि आप इसके बजाय run का उपयोग करते हैं, तो पाइथन स्क्रिप्ट run जारी रखने से पहले वापस आने तक प्रतीक्षा करती है।

https://docs.python.org/3/library/subprocess.html#using-the-subprocess-module

यदि आपको किसी कारण से Popen का उपयोग करना पड़े तो आप उदाहरण के लिए Popen.wait पर कॉल कर सकते हैं, लेकिन मैं केवल run का उपयोग करूंगा।

0
Tzane 26 मई 2021, 09:41