2016-07-28 66 views
0

蟒蛇Pexpect的我使用Pexpect的創建簡單的Python腳本另一臺服務器上的SSH找到文件,創建使用無法使用在Linux上使用

CurrentCommand = "ssh " + serverRootUserName + "@" + serverHostName 
child = pexpect.spawn(CurrentCommand) 

現在我正在像LS-一個或一些命令一個spwan過程「找到的/ opt /許可/ -name‘* .XML’」 使用代碼

child.run(mycommand) 

如果它工作正常運行,從Pycharm但如果從終端中運行它不工作就無法找到任何文件,我認爲它正在研究我的本地系統。

任何人都可以給我一些建議。謝謝

回答

0

作爲一個建議,看看paramiko庫(或結構,它使用它,但有一個特定的目的),因爲這是一個ssh的Python接口。它可能會使您的代碼更好,更有彈性,抵禦錯誤或攻擊。

但是,我認爲問題來自您使用run

該函數運行給定的命令;等待它完成;然後將所有輸出作爲字符串返回。輸出中包含STDERR。如果沒有給出命令的完整路徑,則搜索該路徑。

你應該看看的是'期望'。即與spawn你重生,那麼你應該使用expect等待,要得到一個適當的點(如連接,終端就緒後MOTD推等(因爲ouy可能要投入等用戶名和密碼)。

然後要運行sendline一條線發送到程序見例如:

http://pexpect.readthedocs.io/en/latest/overview.html

希望幫助,並認真,看看的paramiko;)

+0

我用這個已經,但它是。不工作child.sendline('mycommand')後跟 child.expect('prompt:') –

+0

您應該期待*然後*發送線路:基本上,您必須等待ssh連接,然後才能嘗試將更多數據添加到它。我驚訝地發現ssh不會要求用戶名和密碼(除非你使用ssh密鑰,但是你最好使用-i參數在原始的ssh連接上指定你的密鑰。您開始的過程 - 它更多用於運行腳本 – Jmons

+0

我沒有在這裏寫完整的代碼,我運行了命令child = pexpect.spawn(CurrentCommand)並提供了密碼,所以我現在有了子對象,它是如果我從unix終端的child.sendline(找到/ opt/license/-name'* .xml')後跟child.expect('prompt:'),它不顯示數據,來自Pycharm正在工作,它看起來像從我運行python腳本文件的位置查看我的本地服務器,例如[email protected] mypyhton.py –