2011-04-05 8 views
5

मान लीजिए कि मैं चलने दें:पायथन में एक प्रक्रिया शुरू और पुन: प्राप्त करने अपनी खिड़की आईडी

<subprocess.Popen object at 0xb72a9d0c> 

कैसे मैं तो window identity प्राप्त कर सकते हैं:

import subprocess; 
P = subprocess.Popen(['gnome-terminal'); 

मैं तो वर्ग Popen का एक उद्देश्य P मिल इस subprocess के?

अंत में, मैं खिड़की उपप्रक्रिया wmctrl का उपयोग करके पैदा की की ज्यामितीय गुण हेरफेर करने के लिए चाहते हैं, लेकिन इस के लिए मैं कुछ विंडो के रूप में जाना जाता windows identity (wmctrl के दस्तावेज़ देखें)

प्रदान करने के लिए की जरूरत है प्रश्न के लिए अधिक संदर्भ, wmctrl -l GNOME डेस्कटॉप पर चल रही विंडो की एक सूची आउटपुट करता है, जहां पहला कॉलम प्रत्येक विंडो के window identity दिखाता है। यह एक हेक्साडेसिमल संख्या है जिसे मैंने देखा है अलग ऊपर से पॉपन द्वारा रिपोर्ट किए गए आउटपुट में शामिल एक से है।

मैंने Popen documentation की जांच की लेकिन मुझे यकीन नहीं है कि इस बिंदु से कैसे आगे बढ़ना है।

कोई विचार? धन्यवाद!

उत्तर

4

विंडो आईडी प्राप्त करने का एक आसान तरीका wmctrl -lp का उपयोग करना है जिसमें प्रक्रियाओं का पीआईडी ​​शामिल होगा। उस व्यक्ति को ढूंढें जो आपके सबप्रोसेस के Popen.pid से मेल खाता है और आपको प्रक्रिया की विंडो आईडी मिल जाएगी।

+0

'wmctrl -lp' विंडोज़ और उनके 'पीआईडी' की एक सूची देता है, लेकिन इनमें से कई विंडोज़ (उपरोक्त उदाहरण में टर्मिनल) एक ही' पीआईडी ​​'के तहत सूचीबद्ध हैं। कैसे बता सकता है कि कौन सा है? क्या 'Popen' ऑब्जेक्ट किसी अन्य पहचानकर्ता को पकड़ता है जो मुझे प्रक्रिया को अनौपचारिक रूप से पहचानने की अनुमति देता है? –

+0

@ एएमवी: यदि gnome-terminal एक ही पीआईडी ​​के तहत अपने सभी उदाहरण चलाता है, तो आप इस विधि का उपयोग करने में सक्षम नहीं हो सकते हैं। कमांड लाइन कॉलम उपयोगी है? – nmichaels

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