ssh 用于长时间运行的程序

ssh 用于长时间运行的程序

我正在编写一个 python 脚本来在远程计算机上执行操作。实际上,python 脚本在我的计算机上运行,​​而远程计算机是运行 ubuntu 的机器人。

我发出的命令启动机器人软件并且不会退出(除非您使用 ^c 杀死它)。我希望发出命令,能够显示接下来 20 秒的输出(或直到它变得“安静”),然后让我的脚本真正完成。

我一直在尝试结合使用 subprocess.run (和变体)和 ssh 选项,并以 & 符号结束命令。这些都不起作用。

这是我到目前为止所得到的(你可以看到一些实验性的替代方案被注释掉和注释掉)。我尝试过的所有操作要么在 ssh 上阻塞(等待子进程完成,但它不会完成),要么只是运行,我什至没有看到 ssh 密码的提示。

def ssh(self, command_line):
        ssh_cmd = ["ssh", "pi@" + self.cfg["BRU_MASTER_IP"], command_line]
        print(ssh_cmd)
        print("1")
        #cmd1 = subprocess.Popen(" ".join(ssh_cmd), shell=True, stdout=subprocess.PIPE)
        completed_process = subprocess.run(" ".join(ssh_cmd), shell=True, capture_output=True, text=True)
        #completed_process = subprocess.Popen(" ".join(ssh_cmd), shell=True, stdout=subprocess.PIPE)
        print("2")
        #completed_process.communicate()
        print("2a")
        #cmd1_out = completed_process.stdout.read()
        print(completed_process.stdout.read())
        print("3")

答案1

我可以协助提供 Linux/Unix 建议,在python.

假设您有一个无尽的长时间运行命令:

可以说ping $HOSTNAME

并且您想ping $HOSTNAME使用 ssh 在远程计算机上运行:

 ssh user@remoteMachine 'ping $HOSTNAME'

但您希望ping $HOSTNAME远程计算机在 15 秒后超时:

 timeout 15 ssh user@remoteMachine 'ping $HOSTNAME'

最终在测试您的脚本正常工作并遵守timeout命令之后。

最后,您的 Linux 命令已准备就绪,您可以python编写脚本了

使用参数和参数创建python脚本以发送上述命令。

注意引号:与(尝试一下)'有不同的行为。"

相关内容