2010-08-10 7 views
30

मेरे पास एक रिमोट मशीन पर कुछ गणना करने वाला पाइथन कोड है, जिसे ए। नाम दिया गया है। मैं बी नामक मशीन से ssh के माध्यम से ए पर कनेक्ट करता हूं क्या मशीन पर आकृति प्रदर्शित करने का कोई तरीका है बी?Matplotlib: रिमोट मशीन पर प्रदर्शित साजिश

+0

संबंधित: http://stackoverflow.com/questions/2801882/generating-a-png-with-matplotlib-when-display-is- ssh -X के प्रयोग पर matplotlib.pyplot)

अन्य उपयोगी समस्या निवारण युक्तियों अपरिभाषित? lq = 1 –

उत्तर

23

यदि आप मैक ओएस एक्स पर मैटलप्लिब का उपयोग करते हैं, तो आपको पहले यह सुनिश्चित करना होगा कि आप X11- आधारित डिस्प्ले बैक-एंड में से एक का उपयोग करें, क्योंकि मूल मैक ओएस एक्स बैक-एंड अपने प्लॉट्स को निर्यात नहीं कर सकता है। एक बैक-एंड चयन

import matplotlib 
matplotlib.use('GTK') # Or any other X11 back-end 

समर्थित बैक समाप्त होता है की सूची के साथ प्राप्त किया जा सकता use() दे रही है एक गलत बैक-एंड नाम के द्वारा प्राप्त किया जा सकता है: matplotlib तो लिस्टिंग संभव बैक समाप्त होता है एक त्रुटि संदेश प्रिंट करता है।

एसएसएच एक्स 11 अग्रेषण का उपयोग matplotlib भूखंडों को प्रदर्शित करने के लिए किया जा सकता है।

+2

यह आपको ऐसा करने के लिए 'pygtk' इंस्टॉल करेगा, और ऐसा लगता है कि यह असंभव है या पाइथन 3 के साथ ऐसा करने के लिए कुल दर्द है। – sudo

+1

यह निश्चित रूप से आपके प्लेटफ़ॉर्म और पैकेज प्रबंधक पर निर्भर करता है। मैकोज़ पर, मैकपॉर्ट्स में एक py27-pygtk पैकेज है जो पाइथन 2 के लिए चिकनी स्थापित करना चाहिए। – EOL

+1

@ सुडो मैंने सभी समर्थित बैक-एंड की जांच की है। मेरे मामले में, 'TkAgg' और' GTK3Cairo' बैक-एंड पायथन 3 के लिए काम करते थे। 'TkAgg' तेज़ी से प्रतीत होता है। – epokhe

21

निश्चित रूप से, आप एक्स 11 अग्रेषण सक्षम कर सकते हैं। आम तौर पर इस ssh को -X या -Y विकल्प गुजर द्वारा किया जाता है जब आप दूरस्थ कंप्यूटर से कनेक्ट

ssh -X computerA 

नोट कंप्यूटर एक पर SSH डेमॉन भी X11 अग्रेषण सक्षम करने के लिए कॉन्फ़िगर करना होगा कि। यह

X11Forwarding yes 

कंप्यूटर ए में sshd_config कॉन्फ़िगरेशन फ़ाइल डालकर किया जाता है।

यदि कंप्यूटर ए के एसएसएच डिमन में X11 फ़ॉरवर्डिंग सक्षम नहीं है, तो आप हमेशा पाइथन को टेक्स्ट फ़ाइल की गणना के परिणाम लिख सकते हैं, इसे कंप्यूटर बी पर डाउनलोड कर सकते हैं और स्थानीय रूप से Matplotlib का उपयोग कर सकते हैं।

+0

धन्यवाद, लेकिन sshd_config कहां है? – Mermoz

+1

अद्यतन: यह/etc/sshd_config – Mermoz

+2

मेरे लिए है/etc/ssh/sshd_config – zanbri

9

निम्नलिखित मशीन मैक ओएस एक्स का उपयोग स्थानीय मशीन (मशीन बी) और रिमोट (मशीन ए) पर उबंटू पर करते हुए किया।

ऐसा करने के लिए आपको अपनी स्थानीय मशीन पर X11 सर्वर स्थापित करने की आवश्यकता है।

यदि आप मैक ओएसएक्स (ओएस एक्स माउंटेन शेर या नए) का हालिया संस्करण चला रहे हैं, तो यह एक्स 11 प्री-इंस्टॉल (http://support.apple.com/kb/ht5293 देखें) के साथ नहीं आया होगा। जांचें कि क्या आपके पास मैक टर्मिनल खोलकर X11 है, और xterm चलाएं। यदि कोई एक्स 11 विंडो खुलती है, तो आप पूरी तरह से सेट हो जाते हैं। यदि यह कहता है कि आदेश नहीं मिला है, तो http://xquartz.macosforge.org/landing/ पर जाएं और X11 सर्वर स्थापित करें। फिर लॉगआउट करें और अपने मैक में वापस लॉग इन करें।

वापस लॉग इन करने के बाद, xterm फिर से आदेश चलाने का प्रयास करें। इसे एक्स 11 विंडो खोलना चाहिए। इस बिंदु पर आपके $ DISPLAY चर को भी सही ढंग से सेट किया जाना चाहिए। यदि यह सेट नहीं है, तो सुनिश्चित करें कि आपने XQuartz से X11 इंस्टॉल करने के बाद लॉग इन/आउट किया है।

echo $DISPLAY 
/tmp/launch-I9I3aI/org.macosforge.xquartz:0 
अपने स्थानीय मशीन, उपयोग ssh -X रिमोट मशीन एक में करने के लिए रिमोट से

तब:

ssh -X [email protected] 

फिर रिमोट मशीन पर:

python 
>>> import matplotlib 
>>> matplotlib.use('GTKAgg') #I had to use GTKAgg for this to work, GTK threw errors 
>>> import matplotlib.pyplot as plt #... and now do whatever you need... 

सुनिश्चित करें कि आप पहले matplotlib.use को कॉल करते हैं matplotlib से कुछ और आयात करना (उदाहरण के लिएhttp://oroborosx.sourceforge.net/remotex.html#usessh