2012-07-30 17 views
6

खिड़कियों में, मैं एक बल्ला स्क्रिप्ट है कि वर्तमान में एक 'रोकें' के साथ समाप्त होता है और करने के लिए उपयोगकर्ता के लिए संकेत देता चला रहा हूँ 'जारी रखने के लिए कोई भी कुंजी प्रेस ...'अक्षम 'रोकें'

मैं कर रहा हूँ इस परिदृश्य में फ़ाइल को संपादित करने में असमर्थ और मुझे इनपुट के लिए प्रतीक्षा करने के बजाय स्क्रिप्ट को समाप्त करने की आवश्यकता है जो कभी नहीं आएगा। क्या कोई ऐसा तरीका है जिसे मैं चला सकता हूं जो प्रॉम्प्ट को अक्षम या बाधित करेगा?

मैंने इनपुट में पाइपिंग करने का प्रयास किया है और यह मदद नहीं करता है। यह स्क्रिप्ट subprocess.Popen के माध्यम से अजगर से चलाया जा रहा है। यह एक निकला एक दर्द का एक सा होने के लिए अपने बैच स्क्रिप्ट

+0

मुझे विश्वास है कि 'pause' एक आदेश है कि' cmd' दुभाषिया के लिए अंतर्निहित है चाहेंगे , इसलिए इसे बदलना असंभव होगा। अन्यथा आप केवल 'pause.exe' बना सकते हैं और इसे पथ के सामने रख सकते हैं। –

+0

मुझे समझ में नहीं आ रहा है कि इनपुट पाइपिंग क्यों काम नहीं करती है, आप कमांड लाइन से रीडायरेक्ट कर सकते हैं: 'रोकें

उत्तर

11

cmd.exe /c YourCmdFile < nul

YourCmdFile पर अमल करने की कोशिश करो। मैक्सिमस से नूल के रीडायरेक्ट ने बहुत अच्छा काम किया, धन्यवाद!

पाइथन में काम करने के लिए, यह निम्न पर आ गया। मैंने शुरू किया साथ:

BINARY = "C:/Program Files/foo/bar.exe" 
subprocess.call([BINARY]) 

पुनर्निर्देशन जोड़ने की कोशिश की लेकिन बहुत अच्छी तरह से सब कुछ subprocess.call बच निकलता है और हम ढीला रीडायरेक्ट।

subprocess.call([BINARY + " < nul"]) 
subprocess.call([BINARY, " < nul"]) 
subprocess.call([BINARY, "<", "nul"]) 

खोल = ट्रू का उपयोग करना सही नहीं हुआ क्योंकि बिनरी में स्थान ने इसे निष्पादन योग्य खोजने की कोशिश की।

subprocess.call([BINARY + " < nul"], shell=True) 

अंत में, मुझे ओएससिस्टम पर वापस जाना पड़ा और पुनर्निर्देशन प्राप्त करने के लिए खुद से बचना पड़ा।

os.system(quote(BINARY) + " < nul") 

आदर्श नहीं है, लेकिन यह काम पूरा हो जाता है।

यदि कोई जानता है कि बाइनरी में अंतरिक्ष के साथ काम करने के लिए आखिरी सबप्रोसेस उदाहरण कैसे प्राप्त किया जाए, तो यह बहुत अधिक प्रभावित होगा!

+1

+1, लेकिन cmd.exe की कोई आवश्यकता नहीं है। बस स्क्रिप्ट को सीधे निष्पादित करें: 'script.bat dbenham

+0

मैं 'cmd/c' की अनुशंसा करता हूं क्योंकि "यह स्क्रिप्ट subprocess.Popen के माध्यम से अजगर से चल रही है"। निश्चित नहीं है, कैसे पाइथन स्क्रिप्ट निष्पादित करता है। – Maximus

2
subprocess.call("mybat.bat", stdin=subprocess.DEVNULL) 

mybat.bat फोन और (के रूप में अन्य उत्तर में दिखाया गया है जो ठहराव को निष्क्रिय) खिड़कियों पर nul से इनपुट अनुप्रेषित

+1

ध्यान दें कि केवल पायथन 3 में काम करता है। पायथन 2.x में आपको devnull (जैसे 'devnull = open (os.devnull,' r ') ') को फ़ाइल हैंडल प्राप्त करना होगा और इसके बजाय stdin के रूप में पास करना होगा। –

+0

@ ब्रेंटनाश अच्छी पकड़। मैं Python2/3 संगतता के लिए तुम्हारा उपयोग कर समाप्त हो गया। संसाधन लीक से बचने के लिए फ़ाइल को बंद करने के लिए सुनिश्चित करें (जो पाइथन 3 इस मामले में चेतावनी उठाता है)। –

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