2012-01-19 102 views
25

Drush commands not executing using Paramiko如何使用的paramiko更改目錄?

我發佈了上述關於使用Paramiko收到的持續性錯誤消息的問題。我不認爲這與我的下一個問題有關,但可能是。

我可以通過使用SSH的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'] 
>>> 

我誤解這是怎麼回事?我應該無法更改目錄嗎?或者,如果我可以,我應該這樣做比使用exec_command一些其他的方式?

-

我不能回答我自己的另一7小時問題,所以這裏的答案:

這傢伙有它想通了:http://www.vertigrated.com/blog/2010/02/python-remote-ssh-with-paramiko/

你只需要發送多個)

然後stdout.readlines(將;

myssh.exec_command( 'PWD CD ..'):用一種exec_command命令,如返回您更改的目錄。

+0

[如何在Paramiko的單個會話中執行多個命令? (Python)](https://stackoverflow.com/questions/6203653/how-do-you-execute-multiple-commands-in-a-single-session-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']」 –

3

從版本2.1及以上版本更改目錄的方法是 sftp.chdir('path/to/directory')

1

那麼的paramiko創建外殼的一個實例,所有你想要的paramiko中執行命令在只有殼的該實例給予。

例如: 讓我們說,我有我的目錄中的一些文件夾。

folder1 
folder2 
folder3 

現在,如果我想cd到文件夾1,並創建一個目錄有什麼,我會做的是:

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

,如果你把它寫這樣的:

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

你會得到結果如

folder1 
folder2 
folder3 
folder4 

因爲那些兩個不同的shell實例,並且它們的功能是獨立的。