2016-03-03 3 views
7

का उपयोग कर एक ही टीसीएल शैल पर कमांड कैसे चलाएं I TCL में लिखी गई सभी पुस्तकालयें हैं। मैं पायथन में एक जीयूआई बनाना चाहता हूं जिसमें कुछ बटन और अन्य विकल्प होंगे। शुरुआत में टीसीएल खोल खुल जाएगा। जब मैं बटन क्लिक करूंगा, संबंधित आदेश टीसीएल खोल पर निष्पादित किए जाएंगे।पायथन

क्या टीसीएल खोल को बंद किए बिना टीसीएल के उसी खोल पर आदेशों को आग लगाना संभव है।

मैंने Google की खोज की और पाइथन में Tkniter मॉड्यूल पाएं लेकिन जब भी मुझे आदेश निष्पादित करने की आवश्यकता होती है तो यह टीसीएल खोल खोल देगा।

+0

मुझे लगता है जैसे आप इसे गलत कर रहे हैं अगर आप एक कमांड चलाने के लिए हर बार एक नया दुभाषिया बना रहे हैं। यह ऊपरी भाग की मात्रा को अधिकतम कर रहा है, जो हास्यास्पद है। –

+1

@ डोनलफेलो मैं इसे पढ़ता हूं क्योंकि वह एक टीसीएल दुभाषिया प्रक्रिया का उपयोग कैसे करना है। जैसे स्पष्ट रूप से हर बार एक नई प्रक्रिया शुरू नहीं। –

+0

नहीं, मैं हर बार नया दुभाषिया बनाना नहीं चाहता हूं। मैं वही पुराना टीसीएल खोल – Nitesh

उत्तर

2

आप निश्चित रूप से Tkinter उपयोग कर सकते हैं एक ही Tcl दुभाषिया में आदेशों की एक श्रृंखला को चलाने के लिए:

Python 2.7.9 (default, Feb 28 2016, 05:52:45) [C] on sunos5 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import Tkinter 
>>> root = Tkinter.Tk() 
>>> root.tk.eval('set msg "hello world"') 
'hello world' 
>>> root.tk.eval('string length $msg') 
'11' 
>>> root.tk.eval('foreach x {1 2 4} {puts "$msg $x"}') 
hello world 1 
hello world 2 
hello world 4 
'' 
>>> 

- यहाँ चर संदेश एक आदेश में सेट कर दिया जाता है और इसके मूल्य बाद में आदेशों में प्रयोग किया जाता है, जो नहीं होता अगर हम प्रत्येक कमांड के लिए एक नया दुभाषिया बना रहे थे तो काम करें। यदि आप नहीं बनने वाली ताकत वाली विंडो नहीं चाहते हैं, तो इसे छिपाने के लिए बस root.tk.eval('wm withdraw .') चलाएं।

यह आपके सवाल का जवाब नहीं है, तो आप के लिए किया था बेहतर समझाने और क्या यह संभव है कि आप की जरूरत :-)

+1

मजेदार तथ्य: रूट विंडो बनाने के बिना टिंकर का उपयोग करना संभव है। 'Tk' क्लास 'useTk' नामक एक कीवर्ड तर्क लेता है। यदि आप इसे 'गलत' पर सेट करते हैं तो आपको टीके के बिना एक टीसीएल दुभाषिया मिल जाएगा। –

1

यह समस्या Pexpect

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

प्रयोग उदाहरण Pexpect वेबसाइट

child = pexpect.spawn('scp foo [email protected]:.') 
child.expect ('Password:') 
child.sendline (mypassword) 

से सीधे लिया तुम एक बच्चे प्रक्रिया के रूप में टर्मिनल अंडे और उसके बाद इस बच्चे का उपयोग करते हैं जीयूआई एक घटना उत्पन्न आदेश भेजने कर सकते हैं।

+1

प्रश्नकर्ता का कहना है कि उनके पास पहले ही टीसीएल में लिखे गए पुस्तकालय हैं जिन्हें उन्हें पायथन से कॉल करने की आवश्यकता है। अपेक्षा-शैली की कार्यक्षमता यहां अप्रासंगिक है। –

+0

हां यह सच है हालांकि मुझे लगता है कि यह उम्मीदवारों के साथ पायथन जीयूआई पर एक बटन पर क्लिक करने के लिए उत्पन्न घटनाओं को जोड़कर पूरा किया जा सकता है। – Sharad

+0

अगर यहां कुछ ऐसा है जो मुझे याद आ रहा है तो कृपया इसका विस्तार करें – Sharad

0

मैं इस सरल tcl कार्यक्रम pgm.tcl

बनाई गई है
puts "Hello world" 

मैं इसे एक में शुरू कर सकते हैं सांत्वना

tclsh pgm.tcl 

यह इस प्रकार से अजगर में शुरू किया जा सकता है

from subprocess import Popen, PIPE 
p1 = Popen(['tclsh', 'pgm.tcl'], stdout=PIPE) 
p1out, p1err = p1.communicate() 
if p1out is not None: print (p1out) 
if p1err is not None: print (p1err) 

यह उत्तर ओएस निर्भर (लिनक्स) है, लेकिन आप इसे अन्य ओएस में अनुकूलित करने में सक्षम होना चाहिए।