[英]Paramiko and “remote python”
我希望能夠通過 SSH 連接控制遠程 Python 解釋器,並從 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
這使我可以使用pdb
與遠程應用程序對話: channel.set("command\n")
。
It works perfectly with bash
, with gdb
, but there is nothing I can do to get an output stream from python
(v2)
Python 如何處理它的 output stream,為什么我的代碼不起作用?
根據您的目標,您可以采用這兩種方式中的一種(不過,我相信還有其他幾種選擇。)。
如果你想通過 python 控制遠程機器上腳本的執行,你可以試試Fabric 。 從他們的網站:
Fabric 是一個 Python(2.5 或更高版本)庫和命令行工具,用於簡化 SSH 在應用程序部署或系統管理任務中的使用。 它提供了一套基本的操作,用於執行本地或遠程 shell 命令(通常或通過 sudo)和上傳/下載文件,以及提示運行用戶輸入或中止執行等輔助功能。
如果你想控制遠程進程並將它們的 output 集成到你的主程序流中,你可以使用multiprocessing 模塊。 來自PEP 371 :
package 還提供服務器和客戶端功能 (processing.Manager) 以提供對象和任務的遠程共享和管理,以便應用程序不僅可以利用本地計算機上的多個內核,還可以跨聯網計算機集群分發對象和任務。
除非這是一個學術練習,或者您有使用 ssh 的特定要求,請查看pushy 。 我從未使用過它,但它看起來很成熟。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.