Выходной файл создается до того, как будут доступны результаты базы данных.
Передача простой команды os отлично работает:
# command = "whoami > result.txt"
работает отлично. Я получу свое имя пользователя, когда открою файл result.txt. Проблема в ожидании, пока база данных вернет результат. Он выходит пустым, даже если есть данные, возвращаемые из фактического запроса.
import paramiko
def get_report(command):
# reference: https://stackoverflow.com/questions/5193886/python-paramiko-issue-while-closing-the-connection.
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect('server123', username='username', password='password')
stdin, stdout, stderr = client.exec_command(command)
exit_status = stdout.channel.recv_exit_status()
if exit_status == 0:
print("File processed")
else:
print("Error", exit_status)
client.close()
command = "sql_query.script > result.txt"
get_report(command=command)
Я ожидаю получить набор данных first_name, last_name и location, но вместо этого получаю ошибку 108.
Он работает нормально, как если бы я вставил его в терминал. Проблема заключается в использовании paramiko. Он создает файл до завершения SQL.
если поставить /bin/bash -c 'sql_query.script > result.txt 2>&1'
в сценарии выше? Это гарантирует, что у вас есть оболочка bash, и вы будете передавать все в result.txt
, включая сообщения об ошибках, на случай, если sql_query.script
завершится ошибкой.
Было ли это полезно?
Где/как вы получаете "Ошибка 108"?
Если команда не работает при выполнении с помощью Paramiko, отладьте ее, прочитав ее вывод об ошибках.
Используйте stderr.readlines()
для этого.
Если одна и та же команда работает в обычной оболочке, но не в Paramiko, проблема обычно связана с другой средой, используемой каналом SSH «exec», который используется SSHClient.exec_command
. Видеть:
Значение базы данных не указано в файле sqlhosts или в реестре возникает ошибка, которую я получаю. Я посмотрю, почему, но вы указали, как обнаружить ошибку. Спасибо!!!
Я добавил несколько общих советов к моему ответу.
если вы поместите
sql_query.script > result.txt
в cronjob на этой удаленной машине, она будет работать должным образом?