2012-07-23 10 views
15

मुझे समझ में नहीं आता कि विंडोज पर ऐसा करना इतना मुश्किल क्यों है।पायथन: विंडोज पर नया कमांड प्रॉम्प्ट प्रारंभ करें और इसके लिए प्रतीक्षा करें/बाहर निकलें

मैं कमांड प्रॉम्प्ट विंडोज़ का एक समूह बनाना चाहता हूं जो अन्य स्क्रिप्ट चलाएगा। कारण यह है कि मैं यह चाहता हूं कि मैं प्रत्येक स्क्रिप्ट से सभी आउटपुट को अच्छी तरह से देख सकूं (यदि मेरे पास मुख्य विंडो में थ्रेड/सबप्रोसेसेस हैं तो मैं सभी आउटपुट को ठीक से नहीं देख सकता)। मैं आउटपुट लॉग इन नहीं करना चाहता क्योंकि यह ज्यादातर प्रगति सलाखों को देखने के लिए है, जो वास्तव में लॉग फ़ाइलों के साथ काम नहीं करते हैं। काम

मेरी आवश्यकताओं की तो अलग अलग हिस्सों, लेकिन नहीं एक साथ:

os.system("start cmd /c {command here}")  # Launches in new command prompt, closes when done 

हालांकि, ओएस प्रणाली मुझे आदेश खत्म तक इंतजार (के बाद से शुरू वास्तविक आदेश है नहीं दूँगी, दूसरा यह खोलता है

p = subprocess.Popen(["start", "cmd", "/k", "{command here}], shell = True) # Needs to be shell since start isn't an executable, its a shell cmd 
p.wait() # I can wait until finished (although it too finishes after start finishes) 

तो मैं कैसे इस करते हैं: नया कमांड प्रॉम्प्ट यह अगर मैं कोशिश "हो गया") है

इसी तरह? मैंने कहीं पढ़ा है कि एक समाधान प्रक्रिया समूह का उपयोग करने के लिए हो सकता है लेकिन यह केवल यूनिक्स है .... या

या यदि आपके पास एक ही विंडो में सभी उपप्रोसेसेस से आउटपुट प्रदर्शित करने का एक साफ तरीका है, तो मैं नहीं करता एक नया कमांड प्रॉम्प्ट खोलने की आवश्यकता नहीं है और केवल थ्रेड का उपयोग कर सकते हैं। यह भी काम करता है, लेकिन अगर मैंने कुछ थ्रेड डाउनलोड करने और प्रगति पट्टी को प्रदर्शित करने के साथ-साथ अन्य सूचनाओं को आउटपुट करने का कहना है, तो मुझे नहीं पता कि इसे कैसे प्रदर्शित किया जा सकता है (साथ ही साथ उन सभी को टकराने से बचें एक दूसरे)।

पीएस: यह विंडोज विस्टा पर है। पीपीएस: मैं अधिमानतः एक समाधान की तरह जो विंडोज, लिनक्स और मैक पर काम करता हूं, मैं अब विंडोज़ पर ध्यान केंद्रित कर रहा हूं लेकिन मुझे एक समाधान चाहिए जो तीनों के लिए काम करता है, और मुझे पता है कि विंडोज सबसे जटिल है। मैं बस ओएस उपयुक्त कमांड के लिए "प्रारंभ cmd/c" को प्रतिस्थापित करूंगा।

+0

एक कारण बनाम अपने आदेश के रूप में उपयोग करते हुए 'cmd' आप 'स्टार्ट' का प्रयोग कर रहे है? – Joe

+0

एकमात्र तरीका है कि मुझे एक नया कमांड प्रॉम्प्ट खोलने के लिए मिला है, अगर कोई अन्य तरीका है जो ठीक है – robev

उत्तर

24

मेरे पिछले जवाब आप क्या जरूरत के लिए अपनी टिप्पणी पढ़ने पर है:

os.system("start /wait cmd /c {command}") 

हाथ में हमेशा रखें the windows command reference!

1

कैसे के बारे में

os.system("cmd /c {command here}") 

या यहां तक ​​कि

os.system("{command here}") 

यह शुरुआत एक है कि एक अलग सत्र लॉन्च कर रहा है के बजाय एक ही एक अजगर कार्यक्रम पर चल रहा है का उपयोग करते हुए आदेश है।

+0

यह एक नई कमांड प्रॉम्प्ट विंडो शुरू नहीं करता है, तो यह वर्तमान विंडो में चलता है – robev

4

आप start कमांड को समाप्त करने के लिए प्रतीक्षा करने के लिए/WAIT पास कर सकते हैं।

2

एक नया कमांड प्रॉम्प्ट विंडो पर खोलने के लिए मैं का उपयोग करें:

os.system("start /B start cmd.exe @cmd /k mycommand...") 
संबंधित मुद्दे