[英]python log stderr to file
我正在尝试使用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没有发现这个错误? 任何想法为什么?
不,详细标志将文件列表打印到stderr,否则不能,因为在stdout中写入了tar文件。 你可以做的是不要使用详细标志。
PS。 对于这个小脚本,我认为shell脚本更有效。
尝试在SSH命令中添加-n
标志。 如果tar
看到stdin
输入,它会将错误发送到stdout
而不是stderr
:“从成员名称中删除前导'/'
使用ssh客户端( -n
)禁用stdin
将导致tar
使用stderr
进行报告。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.