2016-08-30 3 views
0

をCMDに解釈しているので、私は、robocopyをコマンドの後にCMDに「K」と「V」の値を挿入したいコードのpythonの窓は、forループからの値が、ここではコマンド

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) 

ですループのためには、辞書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 

2つのファイルが失敗した場合、スクリプトはメールをいくつかのメールアドレスに送信する必要があります。

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

または、Pythonの3.6で:それは次のようになります行うにはPythonで

+0

'k'と' v'の値を 'cmd'文字列に挿入する方法を尋ねていますか? – FamousJameous

+0

"Robocopy {} {}/E ..."。フォーマット(k、v) –

+0

はいJameous、私はkとvの値をrobocopyコマンドに挿入したい – 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

これは動作しません – Ajsh

+0

これは動作していますcmd = 'robocopy {} {}/E {cmd} = {' robocopy '、k、v、'/E '、'/MIR '、'/W:2'、 '/ R:/MIR/W:2 /R:1'.format(k,v) – Ajsh

+0

@ user1602531どうしたのですか?エラーメッセージは何ですか? – refi64

関連する問題