Python Log Stderr в файл - PullRequest
       6

Python Log Stderr в файл

0 голосов
/ 15 сентября 2011

Я пытаюсь создать скрипт резервного копирования, используя ssh и вызывая модуль subprocess.Popen, затем он проверяет, stderr содержит что-либо и записывает ошибку в файл журнала, но обнаруживает, что первый вывод является частью stderr

def server():
    bpath = "/mnt/backup/server-address/usrlocalbin/"
    rpath = "/usr/local/bin"
    bpath1 = "/mnt/backup/server-address/project/"
    rpath1 = "/var/www/project"
    cmd1 = "ssh -q root@server-address tar -zcf - "+rpath+" > " +bpath+"usrlocalbin.tar.gz"
    cmd2 = "ssh -q root@server-address tar -zcf - "+rpath1+" > " +bpath1+"project.tar.gz"
    exec1 = subprocess.Popen(cmd1,shell=True,stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    stdout,stderr = exec1.communicate()
    if stderr:
        log.write(t+ " "+ stderr + " \n")
    else:
        log.write(t+ " "+ "Backup of /usr/local/bin/ for server-address complete..\n")
    exec2 = subprocess.Popen(cmd2, shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
    stdout,stderr = exec2.communicate()
    if stderr:
        log.write(t+ " "+ stderr + " \n")
    else:
        log.write(t+ " "+ "Backup of /var/www/project for server-address complete..\n")

в файле журнала

15-September-2011_12.14PM tar: Removing leading `/' from member names

Я думаю, что он взял первую строку и подумал, что это часть stderr ... есть идеи, как это исправить?

после дополнительных исследований:

это было из-за смолы ...

исправлено с помощью

"ssh -q root @ cce-linsvcs-001 tar zcfP -" + rpath + ">" + bpath + "usrlocalbin.tar.gz"

новая ошибка

чтобы снова протестировать stderr, я отключил ssh для удаленного хоста

ssh root@server-address
ssh: connect to host server-address port 22: No route to host

а stderr не уловил эту ошибку? есть идеи почему?

Ответы [ 2 ]

2 голосов
/ 15 сентября 2011

Нет, флаг verbose печатает список файлов в stderr, и это не может быть иначе, потому что в stdout записан tar-файл. Что вы можете сделать, это не использовать подробный флаг.

пс. для этих небольших скриптов я думаю, что скрипты оболочки более эффективны.

0 голосов
/ 09 февраля 2012

Попробуйте добавить флаг -n к команде SSH.Если tar видит ввод stdin, он отправит ошибку stdout вместо stderr: «Удаление начального` / 'из имен членов »

Отключение stdin с помощью клиента ssh(-n) заставит tar использовать stderr для отчетов.

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