2016-08-30 3 views
0

여기서 코드는파이썬 윈도우 명령을 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) 

난, ROBOCOPY 명령 이후에 cmd에서 "K"값 및 "V"를 삽입하고자 함께 있도록 에서 루프는 사전 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 

두 개의 파일이 실패한 경우 스크립트는 일부 전자 메일 주소로 메일을 보내야합니다. 파이썬 3.6,

cmd = 'robocopy {} {} /E /MIR /W:2 /R:1'.format(k, v) 

또는 :

+0

'k'와'v' 값을'cmd' 문자열에 삽입하는 방법을 묻고 있습니까? – FamousJameous

+0

"robocopy {} {}/E ...". 형식 (k, v) –

+0

예 Jameous, robocopy 명령에 k 및 v 값을 삽입하려고합니다. – Ajsh

답변

0

파이썬의 방법은 될 것이라고해야 할 일

그러나
cmd = f'robocopy {k} {v} /E /MIR /W:2 /R:1' 

이 잘못입니다!kv에 공백이있는 경우 오류가 발생하고 security hazard 일 수 있습니다 (k = '; rm -rf /; 인 경우). 서브 프로세스를 생성하는 올바른 방법은 다음과 같습니다.

cmd = ['robocopy', k, v, '/E', '/MIR', '/W:2', '/R:1'] 
+0

이 작동하지 않습니다. cmd = [ 'robocopy', k, v, '/ E', '/ MIR', '/ W : 2','/ R : 1'] – Ajsh

+0

하지만이 작업은 cmd = 'robocopy {} {}/E입니다./MIR/W : 2 /R:1'.format(k,v) – Ajsh

+0

@ user1602531 어떻게 작동하지 않았습니까? 오류 메시지는 무엇입니까? – refi64