2012-01-19 31 views
25

Drush commands not executing using ParamikoLàm cách nào để thay đổi thư mục bằng cách sử dụng Paramiko?

Tôi đã đăng câu hỏi trên liên quan đến thông báo lỗi liên tục mà tôi nhận được bằng cách sử dụng Paramiko. Tôi không nghĩ rằng nó có liên quan đến câu hỏi tiếp theo của tôi, nhưng nó có thể là.

Tôi có thể kết nối thành công với máy chủ của mình qua SSH bằng cách sử dụng Paramiko. Tôi có thể thực hiện các lệnh như ls hoặc pwd. Những gì tôi không thể làm là thay đổi thư mục. Tôi có thể gửi lệnh "cd .." ví dụ, nhưng khi tôi theo dõi với "pwd" nó cho thấy rằng tôi đã không thay đổi thư mục. Nó chỉ liệt kê thư mục ban đầu mà tôi đang sử dụng khi tôi đăng nhập.

>>> 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'] 
>>> 

Tôi có hiểu lầm những gì đang xảy ra ở đây không? Tôi có nên không thể thay đổi thư mục không? Hoặc nếu tôi có thể, tôi có nên làm nó theo cách khác hơn là sử dụng exec_command không?

-

tôi không thể trả lời câu hỏi của riêng tôi cho người khác 7 giờ, vì vậy đây là câu trả lời:

anh chàng này đã có nó đã tìm ra: http://www.vertigrated.com/blog/2010/02/python-remote-ssh-with-paramiko/

Bạn chỉ cần gửi nhiều lệnh với một exec_command, chẳng hạn như:

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

Sau đó stdout.readlines() sẽ trả về thư mục mà bạn đã thay đổi thành.

+0

Bản sao có thể có của [Làm thế nào để bạn thực thi nhiều lệnh trong một phiên duy nhất trong Paramiko? (Python)] (https://stackoverflow.com/questions/6203653/how-do-you-execute-multiple-commands-in-a-single-session-in-paramiko-python) – tripleee

Trả lời

25

anh chàng này đã tìm ra nó: http://www.vertigrated.com/blog/2010/02/python-remote-ssh-with-paramiko/

Bạn chỉ cần gửi nhiều lệnh với một exec_command, chẳng hạn như:

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

Sau đó stdout.readlines() sẽ trả về thư mục mà bạn đã thay đổi đến.

+0

Tôi đã cố gửi nhiều lệnh với một exec_command như "ssh.exec_command ('cd/usr/soumya/PGMS /; pwd')", nhưng nó không hoạt động. Do đó tôi đã cố gắng để in đầu ra stderr và nó là như sau: ['bash: dòng 0: cd:/usr/soumya/PGMS /: Không có tập tin hoặc thư mục \ n']. Đầu ra cho thấy nó vẫn còn trong thư mục gốc. "['/ root \ n']" –

0

Một chút muộn với điều này, nhưng có thể 'invoke_shell' và ghi vào đầu vào tiêu chuẩn thông qua tệp.

Xin xem: https://stackoverflow.com/a/6203877/1861353

Có vẻ một chút nặng kể từ khi bạn có thể chỉ cần ';' tham gia (cmdlist) và gửi cho exec_command..

3

Tính đến phiên bản 2.1 + phương pháp để thay đổi thư mục là sftp.chdir('path/to/directory')

1

Vâng paramiko tạo ra một thể hiện của lớp vỏ và tất cả các lệnh mà bạn muốn thực hiện trong paramiko phải được đưa ra trong đó thể hiện của chỉ vỏ.

Ví dụ: Giả sử tôi có một số thư mục trong thư mục mà tôi đang sử dụng.

folder1 
folder2 
folder3 

Bây giờ nếu tôi muốn cd vào thư mục 1 và thực hiện một thư mục có những gì tôi sẽ làm là:

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

nếu bạn viết nó thích:

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

bạn sẽ nhận được kết quả như

folder1 
folder2 
folder3 
folder4 

như những hai trường hợp khác nhau của vỏ và sẽ độc lập trong chức năng của chúng.

Các vấn đề liên quan