如何通过 ssh 连接远程执行 python 程序(它将在接下来的几分钟内与主机实时通信)?
How to get a python program executed remotely (which will communicate live with the host machine for next few minutes) via ssh connection?
我需要一个 TCP 连接(客户端-服务器模型)。我使用 "sftp" 将我的服务器程序放在远程机器上。现在我需要在远程机器上执行(监听...)这个服务器程序,然后我可以 运行 我机器上的客户端程序来建立连接。请建议一种通过 ssh 连接远程执行服务器的方法。我已经尝试 ssh.exec_command("sudo python server.py",shell = True) 并将此命令写入 bash 脚本和 运行ning 那个 bash 脚本但是程序 运行 运行一段时间(毫秒),然后一旦父代码移动到 "ssh.exec_command(...)" 旁边的行(或者你可以说一旦它执行行 ssh_client.close ()) 终端 运行ning 服务器关闭。因此,在 运行ning 后返回 client.py "Connection refused error"。我还尝试了很多其他的事情,比如 运行 在后台使用 'nohup' 等程序。请不要建议我对所有任务都使用 ssh。
截至目前,我仍然无法找到完成任务的合法方法,但我猜想有一个对我有用并且肯定对任何人都有用的 hack。
所以,在 parent 程序中,它类似于
client = SSHClient()
client.load_system_host_keys()
client.connect('ssh.example.com')
stdin, stdout, stderr = client.exec_command('python server_program.py')
client.close()
但是上面的代码无法保持 运行 宁 server_program.py 因为一旦 client.close()
行被执行,parent 程序就会结束,child 程序。
但是破解方法是将上面的代码放在一个新的 python 程序中说 new.py 并在 client.close()
和 运行 之前添加一行 time.sleep(A LARGE RANDOM NUMBER)
'new.py' 来自 parent 程序使用
process = subprocess.Popen(['python new.py'], stdout=PIPE, stderr=PIPE, shell=True)
因此 parent 将保持 运行ning,child 也会如此。最后,完成工作后,您可以使用 process.kill()
.
终止程序
我需要一个 TCP 连接(客户端-服务器模型)。我使用 "sftp" 将我的服务器程序放在远程机器上。现在我需要在远程机器上执行(监听...)这个服务器程序,然后我可以 运行 我机器上的客户端程序来建立连接。请建议一种通过 ssh 连接远程执行服务器的方法。我已经尝试 ssh.exec_command("sudo python server.py",shell = True) 并将此命令写入 bash 脚本和 运行ning 那个 bash 脚本但是程序 运行 运行一段时间(毫秒),然后一旦父代码移动到 "ssh.exec_command(...)" 旁边的行(或者你可以说一旦它执行行 ssh_client.close ()) 终端 运行ning 服务器关闭。因此,在 运行ning 后返回 client.py "Connection refused error"。我还尝试了很多其他的事情,比如 运行 在后台使用 'nohup' 等程序。请不要建议我对所有任务都使用 ssh。
截至目前,我仍然无法找到完成任务的合法方法,但我猜想有一个对我有用并且肯定对任何人都有用的 hack。 所以,在 parent 程序中,它类似于
client = SSHClient()
client.load_system_host_keys()
client.connect('ssh.example.com')
stdin, stdout, stderr = client.exec_command('python server_program.py')
client.close()
但是上面的代码无法保持 运行 宁 server_program.py 因为一旦 client.close()
行被执行,parent 程序就会结束,child 程序。
但是破解方法是将上面的代码放在一个新的 python 程序中说 new.py 并在 client.close()
和 运行 之前添加一行 time.sleep(A LARGE RANDOM NUMBER)
'new.py' 来自 parent 程序使用
process = subprocess.Popen(['python new.py'], stdout=PIPE, stderr=PIPE, shell=True)
因此 parent 将保持 运行ning,child 也会如此。最后,完成工作后,您可以使用 process.kill()
.