2011-08-26 8 views
12

क्या दूसरा टर्मिनल बनाने का कोई तरीका है ताकि मौजूदा टर्मिनल की बजाय curses फ़ंक्शंस पर सभी कॉल चल सकें? जब मैं चीजों को अंतःक्रियात्मक तरीके से कोशिश कर सकता हूं तो मैं बहुत तेज़ी से काम करता हूं, इसलिए मैं एक टर्मिनल में एक इंटरैक्टिव पायथन दुभाषिया चलाने में सक्षम होना चाहता हूं और दूसरे में शाप आउटपुट देख सकता हूं।क्या पाइथन शाप आवेदन को इंटरैक्टिव रूप से प्रोग्राम करने का कोई तरीका है?

जैसा कि है, एक इंटरैक्टिव विंडो में initscr() को कॉल करना या तो विफल रहता है (PyDev) या मेजबान (स्पाइडर) से विंडो रीफ्रेश को स्थायी रूप से ले जाता है या कंसोल (आईपीथॉन) में अजीब व्यवहार का कारण बनता है।

क्या setupterm() का उपयोग कर एक अलग टर्मिनल लेना संभव है? यदि हां, तो मुझे इसे कॉल करने के लिए अलग-अलग TERM स्ट्रिंग कहां मिलती है?

उत्तर

3

समारोह के उत्पादन डंपिंग का विकल्प होता है मैं इतना विश्वास नहीं है के रूप में शाप मॉड्यूल ज्यादातर (पूरी तरह से?) सेल्सियस पर लागू किया है स्तर। यह असंभव है कि यह ऐसे हुक प्रदान करेगा, हालांकि यदि आप भाषा से परिचित हैं तो स्रोत के माध्यम से देखने लायक हो सकता है।

हालांकि आपके प्रश्न को पढ़ने के दौरान मैंने एक और तकनीक के बारे में सोचा जो मैं अन्य संदर्भों में उपयोग करता हूं। आप किसी अन्य टर्मिनल/संपादक के माध्यम से एक स्क्रिप्ट को सहेज सकते हैं और dnotify कमांड (या यहां तक ​​कि सरल मतदान) जैसी तकनीक का उपयोग अपने चल रहे प्रोग्राम में लोड करने के लिए कर सकते हैं।

एक और विचार आदेशों को भेजने और निष्पादित करने के लिए सॉकेट का उपयोग करना होगा। बेशक यह खतरनाक सुरक्षा-वार है इसलिए आवश्यक सावधानी बरतें।

आपको कुछ बुनियादी ढांचे का निर्माण करना होगा, लेकिन यह शाप के लिए कई डिवाइस समर्थन जोड़ने से कहीं अधिक आसान होगा।

1

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

अच्छा ... इसके लिए काम करने के लिए, मुझे लगता है कि उपयोग करने के लिए आर्किटेक्चर "क्लाइंट-सर्वर" होगा।

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

यदि आपका मुख्य प्रोग्राम किसी सर्वर को शुरू करता है (किसी अन्य पायथन प्रक्रिया पर, सर्वर की प्रकृति के कारण) जो आउटपुट को उससे जुड़े सभी क्लाइंट को भेजता है। इस तरह आप कई टर्मिनल क्लाइंट्स और/या किसी अन्य कंप्यूटर पर फ़ंक्शन के आउटपुट को अपने सर्वर से कनेक्ट करने में सक्षम कर सकते हैं।

मेरी राय पर, 'शाप' पैकेज का उपयोग करने की कोशिश करने से कहीं अधिक आसान है। लेकिन यदि आपका उद्देश्य केवल आपके कोड की अंतर्दृष्टि प्राप्त करना है, तो मुझे लगता है कि यह अधिक जटिल है (कोई अतिरिक्त मूल्य नहीं)।


तुम अब भी एक पाठ फ़ाइल में (log.txt)

3

आप कोड का उपयोग कर सकते हैं। इंटरैक्टिव कंसोल और सॉकेटसेवर एक सॉकेट में पाइथन इंटरैक्टिव खोल संलग्न करने के लिए और इसके माध्यम से अपना विकास करें।एक साधारण उदाहरण की तरह दिखता है:

import sys 
import SocketServer 
from code import InteractiveConsole 

class InteractiveServer(SocketServer.BaseRequestHandler): 
    def handle(self): 
     file = self.request.makefile() 
     shell = Shell(file) 
     try: 
      shell.interact() 
     except SystemExit: 
      pass 


class Shell(InteractiveConsole): 
    def __init__(self, file): 
     self.file = sys.stdout = file 
     InteractiveConsole.__init__(self) 
     return 

    def write(self, data): 
     self.file.write(data) 
     self.file.flush() 

    def raw_input(self, prompt=""): 
     self.write(prompt) 
     return self.file.readline() 

if __name__ == '__main__': 
    HOST, PORT = "0.0.0.0", 9999 

    server = SocketServer.TCPServer((HOST, PORT), InteractiveServer) 
    server.serve_forever() 

एक बार जब आप कि उठकर यदि आप किसी अन्य टर्मिनल से पोर्ट 9999 से कनेक्ट और अपना काम करने में कर सकते हैं चल रहा है। आप इसे this screenshot (PNG)

इंटरएक्टिव कंसोल का उपयोग करने के लिए मूल बातें from this post पर काम कर सकते हैं। मैंने इसे एक अन्य प्रोजेक्ट के लिए सॉकेटसेवर के साथ काम करने के लिए संशोधित किया जिस पर मैं काम कर रहा था।

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

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