我实例化一个paramiko通道,然后我执行一个命令并得到它的输出:
channel = transport.open_session()
channel.exec_command('service myservice restart')
stdout = channel.makefile('rb')
for line in stdout:
print line,
但是,在执行命令(完成)后,输出迭代会被阻止。
我测试了ssh:
ssh myhost service myservice restart # terminal gets blocked
ssh -t myhost service myservice restart # OK
所以我想在paramiko中模拟“-t”选项。到目前为止我试过了:
channel = transport.open_session()
channel.get_pty()
channel.invoke_shell()
stdin, stdout = channel.makefile('wb'), channel.makefile('rb')
stdin.write('service myservice restart\n')
for line in stdout:
print line,
但是现在,stdout没有关闭,for for永远不会结束。
有什么想法吗?
答案 0 :(得分:0)
invoke_shell()
似乎返回Channel
,看起来Channel
要求您明确关闭它们。我会尝试关闭你打开的一些频道,特别是invoke_shell()
返回的频道。
答案 1 :(得分:-1)
查看您尝试运行的脚本 - 看看是否有这样的行
/dev/null 2>&1
我遇到与您相同的问题 - 在我的情况下尝试远程运行bitnami控制脚本。你帖子里的东西慢跑了我的记忆,让我想起了控制脚本中的输出重定向(这些让我以前一直很头疼)。
一般情况下,他们习惯于忽略错误或者将它们记录在某个特定地方 - 我还没有机会尝试,但也许要么在脚本结束时将它们退出,或者如果你不关心响应,甚至可能手动将某些已创建的数据重定向到>& 2将起作用。