दिलचस्प पोस्ट
एक दांतेदार पथ चौरसाई मेवेन-छाया-प्लगइन क्या उपयोग किया जाता है, और आप जावा पैकेजों को क्यों स्थानांतरित करना चाहते हैं? उपयोगकर्ता PHP कैसे चल रहा है यह कैसे जांचें? कर्ल का उपयोग कर HTTPS साइट से कनेक्ट नहीं हो सकता। इसके बजाय 0 लंबाई सामग्री लौटाता है। मैं क्या कर सकता हूँ? जावा में एक "तार्किक अनन्य या" ऑपरेटर बनाना अजगर * ऑपरेटर के लिए उचित नाम? पायथन में अनुरोध पुस्तकालय का उपयोग करके "उपयोगकर्ता-एजेंट" भेजा जा रहा है कैसे एक कॉलम हैडर पाठ को jqgrid में एकाधिक पंक्तियों में लपेटें क्या मैं 100% चौड़ाई वाले टेक्स्ट बॉक्स को अपने कंटेनरों से परे तक फैलाने से रोक सकता हूं? सामाजिक नेटवर्क में गतिविधि स्ट्रीम कैसे लागू करें कैसे टुकड़े के बीच के मूल्यों को पारित करने के लिए मैं C ++ एप्लिकेशन में प्रतिबिंब कैसे जोड़ सकता हूँ? बढ़ावा देने में जादू संख्या: हैश_कॉंबिन जावास्क्रिप्ट में स्ट्रिंग में स्ट्रिंग को कैसे परिवर्तित करें? AMD (need.js) का उपयोग करते समय Backbone.js में बूटस्ट्रैप मॉडल लोड करने के तरीके

नई टर्मिनल विंडो में अजगर से टर्मिनल कमांड निष्पादित करें?

यहाँ एक नया अजगर फ़ाइल एक मौजूदा शेल में और मौजूदा अजगर फ़ाइल से एक नए शेल में चलाने के लिए लक्ष्य है। कहो मेरे पास दो फाइल हैं, aaa.py और bbb.py। सादगी के लिए कहें कि सभी आआआप करता है …

subprocess.call('python bbb.py', shell=True) 

… और कहते हैं कि bbb.py करता है …

 print 'It worked' 

अब लक्ष्य को aaa.py टर्मिनल 1 पर चलाना है और इसे टर्मिनल 2 में bbb.py लॉन्च करना है। मैं नीचे दिए गए कमांड की तरह कुछ होने की उम्मीद करता हूं, लेकिन इसे समझ नहीं सकता।

 subprocess.call_in_new_window('python bb.py', shell=True) 

वेब के समाधान से एकत्रित समाधान "नई टर्मिनल विंडो में अजगर से टर्मिनल कमांड निष्पादित करें?"

एक खोल से सामान्य रूप से ऐसा करने का कोई रास्ता नहीं है आपको क्या करना है टर्मिनल प्रोग्राम ही चलाया जाता है, या कुछ लांचर प्रोग्राम जो आपके लिए ऐसा करता है और ऐसा करने का तरीका प्रत्येक टर्मिनल कार्यक्रम के लिए अलग है।

कुछ मामलों में, os.startfile जो आप चाहते हैं वह करेंगे, लेकिन यह सार्वभौमिक नहीं होगा।

इसके अलावा, सामान्य रूप से ध्यान दें, आपको वास्तव में अपनी स्क्रिप्ट के लिए एक पूर्ण पथ की आवश्यकता होगी, क्योंकि नई टर्मिनल खिड़की एक नई शेल चलाई जाएगी और इसलिए जरूरी नहीं कि आपकी एक ही कार्यशील निर्देशिका होगी लेकिन मैं उन उदाहरणों के लिए उस पर ध्यान न दूंगा।


विंडोज सीएमडी के साथ, ऐसा करने का सबसे आसान तरीका start शेल कमांड है। अगर आपके द्वारा start की गई चीज किसी भी कमांड लाइन प्रोग्राम है, जिसमें python भी शामिल है, तो उसे एक नया सीएमडी विंडो मिलेगी। तो, कुछ ऐसा:

 subprocess.call('start /wait python bb.py', shell=True) 

ओएस एक्स के पास एक समान कमांड है, open । और यह एक शेल कमांड के बजाय एक वास्तविक कार्यक्रम है, इसलिए आपको shell=True आवश्यकता नहीं है। हालांकि, एक कमांड लाइन कार्यक्रम या open स्क्रिप्ट चलाना आम तौर पर एक नई टर्मिनल विंडो नहीं खोलता है। वास्तव में, इसका पूरा मुद्दा यह है कि आप प्रोग्राम को चलाने के लिए अनुमति दें, जैसे कि उन्हें खोजक में डबल क्लिक किया जा रहा है, जो कि टर्मिनल में कभी भी कुछ नहीं चलाता जब तक कि यह एक .command फ़ाइल नहीं है।

इसलिए, आप एक अस्थायी बना सकते हैं। .command फ़ाइल open और वह open ; कुछ इस तरह से (untested):

 with tempfile.NamedTemporaryFile(suffix='.command') as f: f.write('#!/bin/sh\npython bb.py\n') subprocess.call(['open', '-W', f.name]) 

वैकल्पिक रूप से, आप स्पष्ट रूप से Terminal.app का उपयोग करने के लिए open बता सकते हैं, ऐसा कुछ:

 subprocess.call(['open', '-W', '-a', 'Terminal.app', 'python', '--args', 'bb.py']) 

या आप AppleEvents के माध्यम से टर्मिनल.app को स्क्रिप्ट कर सकते हैं उदाहरण के लिए:

 appscript.app('Terminal').do_script('python bb.py') 

"स्क्रिप्ट" इवेंट एक नई विंडो खोलता है और एक कमान के रूप में अपनी तर्क चलाता है। यदि आप और अधिक विस्तृत नियंत्रण चाहते हैं, तो AppleScript संपादक में स्क्रिप्टिंग शब्दकोश खोलें और सभी मज़ेदार सामान देखें जो आप कर सकते हैं।


लिनक्स या अन्य * निक्स सिस्टम पर … ठीक है, वहाँ 65,102 विभिन्न डेस्कटॉप वातावरण, लांचर, और टर्मिनल कार्यक्रम हैं। क्या आपको उन सभी पर काम करने की आवश्यकता है?

गनोम-टर्मिनल के साथ, टर्मिनल को फिर से चलाने से आपको एक नई विंडो मिलती है, और -x आर्गुमेंट आपको प्रारंभिक कमांड निर्दिष्ट करने देता है, इसलिए:

 subprocess.call(['gnome-terminal', '-x', 'python bb.py']) 

बहुत से पुराने टर्मिनलों को xterm के साथ संगत करने की कोशिश की जाती है, जो -e साथ एक ही बात करता है:

 subprocess.call(['xterm', '-e', 'python bb.py']) subprocess.call(['rxvt', '-e', 'python bb.py']) 

… आदि।

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

आप ऐसा नहीं कर पाएंगे, कम से कम उतना ही उतना ही नहीं जितना आप इसके बारे में सोच रहे हैं। मुझे संदेह है कि आप "टर्मिनल विंडो" के कारण मैक के बारे में बात कर रहे हैं।

आप इसे एक्स विंडो सिस्टम का उपयोग करने में सक्षम हो सकते हैं, लेकिन आपको ऐसा करने के लिए चीजों की एक गुच्छा की आवश्यकता होगी, एक्स-सर्वर, अनुमतियां आदि।

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

विंडोज और गोले थोड़ा विच्छेद कर रहे हैं।