2013-04-22 69 views
0

我想通過使用python腳本的SSH創建一個新的目錄。當我通過使用Python命令行來嘗試我的命令時,它只是起作用。但是,當我嘗試通過腳本執行相同操作時,它不會創建新的「測試」文件夾(我甚至將腳本中的命令複製/粘貼到Python cmd中以驗證它們是否正確並在那裏工作)。那麼,爲什麼它不能通過腳本工作的任何想法?與Python的Mkdir在SSH上不起作用

所使用的代碼:

child = pexpect.spawn('ssh 192.168.56.101 -oStrictHostKeyChecking=no') 
child.expect=('password:') 
child.sendline('MyPwd') 
child.sendline('mkdir /home/myUser/Desktop/test') 

回答

1

看起來工作時,我只需要添加另一條線路

例如

child.sendline('\n') 

所以整個劇本

child = pexpect.spawn('ssh 192.168.56.101 -oStrictHostKeyChecking=no') 
child.expect=('password:') 
child.sendline('MyPwd') 
child.sendline('mkdir /home/myUser/Desktop/test') 
child.sendline('\n') 
+0

除了您可以用於pxssh模塊,這擴展pexpect.spawn專門設置SSH connections.child.sendline()它是新線的保養。 – 2013-04-22 12:32:28

+0

感謝您的回覆。我現在正在運行一個命令,需要一段時間來處理,輸出存儲在外部文件中。 現在的問題是,當我拋出新的child.sendline()它立即採取這一個,並中斷前一個命令。有沒有辦法讓它在使用下一個sendline()命令之前等待/睡眠,還是我需要pxssh模塊? – Nicholas 2013-04-22 14:10:15

+0

好的,您用於child.prompt(無)併發送命令child.sendline(「ls」) – 2013-04-23 05:30:42

0

什麼我通常這樣做這個問題與主機同步。在我向機器發送了一些東西之後,我希望得到一個答案,這個答案通常在機器的提示中轉化。所以,你的情況,我會去這樣的事情:

child = pexpect.spawn('ssh 192.168.56.101 -oStrictHostKeyChecking=no') 
child.expect('password:') 
child.sendline('MyPwd') 
child.expect('YourPromptHere') 
child.sendline('mkdir /home/myUser/Desktop/test') 
child.expect('YourPromptHere') 

只需更換YourPromptHere與機器的提示,如果你在一個單一的目標上運行的腳本,或者用常規表達式(例如「(\ $)|(#)|(>)」)。 dr:總結我說的話,你需要等到上一個動作完成後再發送一個新的動作。