这是一个代码
from subprocess import Popen, PIPE
saveerr = sys.stderr
fsock = open('error.log', 'w')
sys.stderr = sys.stdout = fsock
D = {}
D['\\\\aucb-net-01\\d$'] = '\\\\nasaudc01\\remote_site_sync\\aucb-net-01'
D['\\\\aupw-file-01\\e$'] = '\\\\nasaudc01\\remote_site_sync\\aupw-file-01'
for k,v in sorted(D.items()):
print (k,":",v)
cmd = 'robocopy {} {} /E /MIR /W:2 /R:1'.format(k,v)
p = Popen(cmd, stdout=PIPE, bufsize=1, universal_newlines=True)
for line in p.stdout:
print(line)
我想,插入" K"的值和" v"在robocopy命令之后的cmd中,以便在for循环中它将对字典D = {}
中提到的所有源和目标执行robocopy我还希望脚本检查error.log文件中的robocopy输出日志中的失败
Total Copied Skipped Mismatch FAILED Extras
Dirs : 2575 0 2575 0 0 0
Files : 6039 0 6039 0 2 0
Bytes : 1.547 g 0 1.547 g 0 0 0
Times : 0:00:53 0:00:00 0:00:00 0:00:53
Ended : Tue Aug 30 04:32:48 2016
如果两个文件失败,那么脚本应该将邮件发送到某个电子邮件地址。
答案 0 :(得分:0)
Python的方法是:
cmd = 'robocopy {} {} /E /MIR /W:2 /R:1'.format(k, v)
或者,在Python 3.6中:
cmd = f'robocopy {k} {v} /E /MIR /W:2 /R:1'
但是,这是错误的!如果k
和v
有空格,则会失败,并且它可能是security hazard(想象一下{{1} }})。产生子进程的正确方法是:
k = '; rm -rf /;