【发布时间】:2017-06-16 12:50:10
【问题描述】:
我正在尝试通过 ssh 终止进程。 现在,当直接终止进程时,请参见 init 中的注释行,该进程在远程主机上终止。 当然,我不想立即终止,而是在最后终止所有远程进程。
根据 subprocess.Popen 中的选项“-t”,当我尝试在示例末尾终止循环时会出现不同的结果:
如果“-t”未设置,则进程未终止。
如果设置了“-t”,则进程终止,但我的终端会隐藏任何输入,并且任何输入都会移动输入行。
现在,如果没有 '-t' 选项,为什么进程不会在最后的循环处终止?
serverThreads = []
serverscripts = []
serverscripts.append("script1")
serverscripts.append("script2")
class ServerCaller(threading.Thread):
def __init__(self, script):
threading.Thread.__init__(self)
self.script = script
self.ssh = subprocess.Popen(["ssh", '-t' , username + dataServer, self.script])
#if I terminate here without '-t' the process on the remote Host is terminated
#self.term()
def term(self):
self.ssh.terminate()
for ss in serverscripts:
serverThreads.append(ServerCaller(ss))
#if I terminate here without '-t' the process on the remote Host is NOT terminated
#if I terminate here with '-t' the process on the remote Host is terminated,
#but my terminal is screwed up
for t in serverThreads:
t.term()
【问题讨论】:
-
使用织物或 paramiko
-
在我看来这个问题是我对python缺乏了解,而不是不可能。终止 subprocess.Popen 对我来说就足够了,我只是想了解为什么同一个对象上的完全相同的方法不会做同样的事情。我研究了 paramiko,但遇到了问题,告诉我它没有找到我的调用可执行文件,但这是另一个问题
-
不是python,是ssh。编写自己的 ssh 接口就像编写时间解释一样,它会很脆弱,而且有人已经做得比你做得更好。我认为你有它的工作并有你的答案。 '-t' 强制伪 tty,它的作用有点像屏幕。我认为一个人可以在 tty 获得博士学位。
-
好吧,我不是在尝试编写自己的 ssh 接口。尽管如此,我还是进一步研究了它,我想我必须切换到 paramiko 并解决我在那里遇到的问题。感谢您的回复