Я пытаюсь создать скрипт резервного копирования, используя 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 не уловил эту ошибку? есть идеи почему?