如何在远程主机上运行本地python脚本并使用子进程与之通信?

时间:2019-09-18 07:40:40

标签: python python-3.x ssh subprocess

我正在尝试编写一个Python程序,该程序在远程主机上执行 local Python脚本,并让我在脚本运行时与其通信。

我的代码当前由两个文件run.pyremote.py组成:

run.py

import os
import subprocess as sp

with open(os.path.join(os.path.dirname(__file__), "remote.py")) as scriptf:
    node_script = scriptf.read()

sess = sp.Popen(["ssh", "remote_host", "/usr/bin/python -"], stdin=sp.PIPE, stdout=sp.PIPE)
stdout, stderr = sess.communicate(node_script)
print(stdout, stderr)
sess.stdin.write("Print me this!\n")

remote.py

import sys

print("Hello!")

while True:
    line = input()
    print(line)

这给了我以下错误:

$ python run.py
Traceback (most recent call last):
  File "<stdin>", line 6, in <module>
EOFError: EOF when reading a line
('Hello!\n', None)
Traceback (most recent call last):
  File "run.py", line 10, in <module>
    sess.stdin.write("Print me this!\n")
ValueError: I/O operation on closed file

有什么办法可以像这样将python脚本通过管道传送到远程Python解释器中,并且以后可以在该脚本上使用类似input()的东西吗?我该如何改变自己的榜样呢?

1 个答案:

答案 0 :(得分:0)

您可以尝试使用paramiko-sftp link将python脚本传输到远程系统,然后使用paramiko-ssh link登录到远程系统以在远程系统上运行脚本。