2012-01-19 9 views
25

Drush commands not executing using Paramikoपैरामीको का उपयोग करके मैं निर्देशिका कैसे बदलूं?

मैंने पैरामीको का उपयोग करते हुए एक लगातार त्रुटि संदेश के बारे में उपरोक्त प्रश्न पोस्ट किया। मुझे नहीं लगता कि यह मेरे अगले प्रश्न से संबंधित है, लेकिन यह हो सकता है।

मैं पैरामीको का उपयोग करके एसएसएच के माध्यम से सफलतापूर्वक अपने सर्वर से कनेक्ट कर सकता हूं। मैं ls या pwd जैसे कमांड निष्पादित कर सकता हूं। जो मैं नहीं कर सकता वह निर्देशिका बदलना है। उदाहरण के लिए मैं "cd .." कमांड भेज सकता हूं, लेकिन जब मैं "pwd" के साथ अनुवर्ती करता हूं तो यह दिखाता है कि मैंने निर्देशिकाएं नहीं बदली हैं। यह सिर्फ प्रारंभिक निर्देशिका जब मैं लॉगिन में मैं कर रहा हूँ सूचीबद्ध करता है।

>>> stdin, stdout, stderr = myssh.exec_command("pwd") 
>>> stdout.readlines() 
['/big/dom/home/myid\n'] 
>>> stdin, stdout, stderr = myssh.exec_command("cd ../") 
>>> stdout.readlines() 
[] 
>>> stdin, stdout, stderr = myssh.exec_command("pwd") 
>>> stdout.readlines() 
['/big/dom/home/myid\n'] 
>>> 

Am मैं गलत समझ यहाँ क्या चल रहा है? क्या मुझे निर्देशिकाओं को बदलने में सक्षम नहीं होना चाहिए? या अगर मैं कर सकता हूं, तो क्या मुझे exec_command का उपयोग करने के अलावा इसे किसी अन्य तरीके से करना चाहिए? -

मैं एक 7 घंटे के लिए अपने ही सवाल का जवाब नहीं कर सकते, तो यहाँ जवाब है:

यह आदमी था यह पता लगा: http://www.vertigrated.com/blog/2010/02/python-remote-ssh-with-paramiko/

तुम बस कई भेजने के लिए ऐसी ही एक exec_command साथ आदेश,:

myssh.exec_command ('सीडी ..; pwd')

फिर stdout.readlines() होगा उस निर्देशिका को वापस करें जिसे आपने बदल दिया था।

+0

संभावित डुप्लिकेट [पैरामीको में एक सत्र में आप एकाधिक कमांड कैसे निष्पादित करते हैं? (पायथन)] (https://stackoverflow.com/questions/6203653/how-do-you-execute-multiple-commands-in-a-single- सत्र-in-paramiko-python) – tripleee

उत्तर

25

यह आदमी यह पता लगा था: http://www.vertigrated.com/blog/2010/02/python-remote-ssh-with-paramiko/

तुम सिर्फ इस तरह के रूप में, एक exec_command के साथ कई आदेश भेजने के लिए है:

myssh.exec_command('cd ..; pwd') 

फिर stdout.readlines() निर्देशिका है कि आप बदल वापस आ जाएगी सेवा मेरे।

+0

मैंने एकाधिक आदेश भेजने की कोशिश की एक exec_command जैसे "ssh.exec_command ('cd/usr/soumya/pGMS /; pwd')", लेकिन यह काम नहीं कर रहा है। इसलिए मैंने stderr आउटपुट मुद्रित करने का प्रयास किया और यह निम्नानुसार है: ['bash: line 0: cd:/usr/soumya/PGMS /: ऐसी कोई फ़ाइल या निर्देशिका \ n'] नहीं। आउटपुट अभी भी रूट में दिखाता है। "[ '/ जड़ \ N']" –

0

इस के साथ थोड़ा देर हो चुकी है, लेकिन यह 'invoke_shell' के लिए संभव है और फ़ाइल के माध्यम से मानक इनपुट को लिखना संभव है।

कृपया देखें: https://stackoverflow.com/a/6203877/1861353

एक छोटा सा हैवीवेट लगता है जब से तुम सिर्फ कर सकते हैं ';' में शामिल होने के (cmdlist) और exec_command को भेजें।।

3

संस्करण के रूप में 2.1+ निर्देशिका बदलने के लिए विधि sftp.chdir('path/to/directory')

1

खैर paramiko खोल का एक उदाहरण बनाता है और सभी आदेश दिए गए हैं paramiko में अमल करना चाहते हैं केवल खोल के कि उदाहरण में दिए जाने की है।

उदाहरण के लिए: हमें बताएं कि मेरे पास निर्देशिका में कुछ फ़ोल्डर है।

folder1 
folder2 
folder3 

अब अगर मैं फ़ोल्डर 1 में सीडी करना चाहते हैं और वहाँ एक निर्देशिका बनाने मैं क्या कर सकता है:

ssh.exec_command('cd folder1') 
ssh.exec_command('mkdir folder4') 

आपको मिल जाएगा:

ssh.exec_command('cd folder1;mkdir folder4') 

आप इसे पसंद लिखने अगर परिणाम

folder1 
folder2 
folder3 
folder4 

जैसा कि वे थे खोल के दो अलग-अलग उदाहरण और उनके कार्य में स्वतंत्र होंगे।

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