Я некоторое время оглядывался и не нашел ответа на это.
Вот мой пример использования:
У меня есть несколько процессов на удаленном компьютере, которые выполняются через скрипт на python, используя paramiko для ssh на машине.На данный момент моя проблема в том, что первый скрипт выполняется нормально, но зависает из-за того, что действие tail из paramiko не завершается.Ниже приведен текущий соответствующий код.
Выполнение соединения ssh:
from paramiko_expect import SSHClientInteraction
def get_logs(appid, app):
try:
ssh = client.connect_ssh(IPADDRESS, USER)
interact = SSHClientInteraction(ssh, timeout=10, display=False)
interact.send('tail -f <Path to file>)
interact.tail(line_prefix=str(app)+': ')
except KeyboardInterrupt:
print('Ctrl+C interruption detected, stopping tail')
finally:
ssh.close()
Не показана вспомогательная функция, но проблема не в этом.ложь, чтобы я ее не включал.
Соответствующая часть основного кода приложения
@app.route('/processing', methods=['GET', 'POST'])
def processing():
form = InstitutionForm()
version_selected = form.versions.data
resp = make_response(render_template('processing.html', form=form))
sp_id = (request.cookies.get('sp_id').strip("[]").replace("L", ""), "SP")
rs_appid = (request.cookies.get('rs_base_id').strip("[]").replace("L", ""), "RS Base")
print "Undeploying"
for i in [rs_appid, sp_id]:
print i[0]
app_actions.undeploy(i[0].strip())
app_actions.get_logs(i[0].strip(), i[1])
while True:
time.sleep(10)
status = app_actions.check_status(i, "'undeploy'")[0][2]
print status
if status == 'failure':
print "undeploy failed"
break
elif status == 'success':
print "undeploy succeded"
break
else:
print "processing"
pass
Так что моя проблема в том, что по сценариючерез функцию processing()
он начинает отображать журналы по желанию из вызова app_actions.get_logs()
.После этого зависает.Похоже, это связано с тем, что вызов tail в функции get_logs()
не заканчивается.
Подытожив мой вопрос:
Используя paramiko, как я могу завершить файл до его остановки, затем выйти и закрыть соединение ssh, чтобы можно было запустить следующую часть цикла?
Извините, если в этом вопросе есть какие-либо ошибки, ошибки или упущения, это мой первый вопрос, задаваемый по SO