2011-07-05 73 views
1

我希望能夠通過SSH連接控制遠程Python解釋器,並從Python本身驅動它。Paramiko和「remote python」

我已經有了一個基本的模板:

ssh.connect(servername, serverport, username, key_filename=key_filename) 

transport = ssh.get_transport() 
channel = transport.open_session() 

channel.exec_command(PATH_TO_EXEC) 

while True: 
    r, w, e = select.select([channel], [], [], 1) 
    if channel in r: 
     try: 
      if channel.recv_ready(): 
       x = channel.recv(64) 
      elif channel.recv_stderr_ready(): 
       x = channel.recv_stderr(64) 
      else: 
       continue 

      if len(x) == 0: 
       print '\r\n*** EOF\r\n', 
       break 
      sys.stdout.write(x) 
      sys.stdout.flush() 
     except socket.timeout: 
      pass 

,讓我交談的遠程應用與pdbchannel.set("command\n")

它與bash作品完美,與gdb,但並沒有什麼我可以做從python得到一個輸出流(V2)

如何Python的處理其輸出流,爲什麼我的代碼不工作它?

+0

第一個答案提供了'paramiko'的非常有趣的替代方法,但是我會好奇地理解這裏有什麼問題,如果任何人有線索...... – Kevin

回答

2

除非這是一個學術練習,否則你有一些使用ssh的具體要求,看看pushy。我從來沒有使用它,但它似乎成熟。

+0

這不是一項學術活動, SSH上的'pushy'看起來很有趣,我會試試! – Kevin

+0

這正是我查找的內容,這是很多:) – Kevin

2

根據你的目標是什麼,你可以按照以下兩種方式之一(但我確定有其他幾種方法)。

如果你想控制通過python執行遠程機器上的腳本你可以試試Fabric。從他們的網站:

Fabric是一個Python(2.5或更高版本)庫和命令行工具,用於簡化SSH在應用程序部署或系統管理任務中的使用。它爲執行本地或遠程shell命令(通常或通過sudo)和上傳/下載文件以及提示正在運行的用戶輸入或中止執行等輔助功能提供了一套基本操作。

如果你想控制遠程進程和輸出集成到您的主程序流程,您可以使用multiprocessing module。從PEP 371

該軟件包還提供了服務器和客戶端功能(processing.Manager)提供對象的遠程共享和管理任務,使應用程序可以在本地計算機上,不僅充分利用多內核,而且還分佈對象以及跨網絡機器集羣的任務。

+0

它肯定是我正在尋找的遠程過程控制,我會試試吧! – Kevin

+0

我第二次投票結果。它在生產環境中非常有用。 –