我正在编写一个 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
脚本以发送上述命令。
注意引号:与(尝试一下)'
有不同的行为。"