蟒窗口从for循环解释的值,以cmd命令
问题描述:
下面是一个代码蟒窗口从for循环解释的值,以cmd命令
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”的在CMD的值和“V” ROBOCOPY命令后,使之与在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
如果两个文件失败,那么脚本应发送邮件到某个电子邮件地址。
答
在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(想象如果k = '; rm -rf /;
)。产生子进程的正确方法是这样的:
cmd = ['robocopy', k, v, '/E', '/MIR', '/W:2', '/R:1']
你问的是如何在'cmd'字符串中插入'k'和'v'的值吗? – FamousJameous
“Robocopy {} {}/E ...”。格式(k,v) –
是Jameous,我想在robocopy命令中插入k和v的值 – Ajsh