При выполнении curl в Paramiko его вывод находится в stderr, а не в stdout - PullRequest
1 голос
/ 29 апреля 2020

У меня есть ручная задача, когда я ssh на сервер, cd в папку и запускаю команду curl, чтобы загрузить файл в эту папку. Я сейчас пытаюсь автоматизировать это в Python программе. Я могу использовать paramiko для s sh на сервере и выполнять любые команды:

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(credentials)
ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command('cd /path/to/folder/ && sudo curl -H \'X-JFrog-Art-Api:api_key\' -O "https://path/to/download/file.tar.xz"', timeout=600)
print(f'curl ssh_stdout: {ssh_stdout.readlines()}')
print(f'curl ssh_stderr: {ssh_stderr.readlines()}')

Файл загружается правильно, но вывод, который я ожидал в stdout, появляется в stderr. Это stderr:

curl ssh_stderr: ['  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n', '                                 Dload  Upload   Total   Spent    Left  Speed\n', '\r  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0\r  0     0    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0\r  0     0    0     0    0     0      0      0 --:--:--  0:00:02 --:--:--     0
...
0  0:04:36  0:04:35  0:00:01 57.6M\r 99 14.9G   99 14.9G    0     0  55.5M      0  0:04:36  0:04:36 --:--:-- 57.6M\r100 14.9G  100 14.9G    0     0  55.5M      0  0:04:36  0:04:36 --:--:-- 57.8M\n']

Это вряд ли хороший способ автоматизировать мой процесс. Есть ли способ сделать это с другой библиотекой, которая может быть лучше приспособлена для такой операции? Я думаю о чем-то вроде requests.

1 Ответ

2 голосов
/ 29 апреля 2020

curl выводит свой прогресс в stderr.

Ничего плохого ни в вашем коде, ни в Paramiko.

В оболочке попробуйте:

curl https://www.example.com/ > stdout 2> stderr

Ваша воля обратите внимание, что stdout будет содержать содержимое example.com HTML, а stderr будет содержать curl выходные данные процесса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...