AKI*_*WEB 0 python nested-loops
我正在开发一个项目,我需要使用Python执行shell脚本.到目前为止一切都很好看.
下面是我的Python脚本,它将执行一个简单的hello world shell脚本.
MAX_TRIES = 2
jsonStr = '{"script":"#!/bin/bash \\n echoo Hello world 1 "}'
j = json.loads(jsonStr)
shell_script = j['script']
steps = ['step1', 'step2', 'step3']
for step in steps:
print "start"
print step
for i in xrange(MAX_TRIES):
proc = subprocess.Popen(shell_script, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
(stdout, stderr) = proc.communicate()
if stderr:
print "Shell script gave some error..."
sleep(0.05) # delay for 50 ms
else:
print "end" # Shell script ran fine.
break
Run Code Online (Sandbox Code Playgroud)
在我上面的脚本中,如果上面的shell脚本由于某种原因而失败并且工作正常,我会重试两次.
现在我的问题是,在上面的脚本中,我有一个错误的shell脚本,它将失败.我有一个for循环,它将steps逐个迭代列表并执行shell脚本.
目前,每个步骤都会打印出来,这不是我想要的 -
start
step1
Shell script gave some error...
Shell script gave some error...
start
step2
Shell script gave some error...
Shell script gave some error...
start
step3
Shell script gave some error...
Shell script gave some error...
Run Code Online (Sandbox Code Playgroud)
如果shell脚本在第一步失败,那么我不想去step2但是我想为每一步重试两次.假设步骤1的shell脚本执行失败,那么我想为step1重试两次,如果它失败了两次,那么我不会去step2但是如果它通过了,那么我只会去step2.
如何以这种方式打破外部循环以便我能够完成此任务?
更新: -
for step in steps:
print "start"
print step
for i in xrange(MAX_TRIES):
proc = subprocess.Popen(shell_script, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
(stdout, stderr) = proc.communicate()
if stderr:
print "Shell script gave some error..."
print stderr
sleep(0.05) # delay for 50 ms
else:
print stdout
print "end" # Shell script ran fine.
break
else:
break
Run Code Online (Sandbox Code Playgroud)
在脚本的末尾添加
else:
break
Run Code Online (Sandbox Code Playgroud)
else如果没有 a ,则循环有一个被调用的子句break; 所以这将被称为如果break在if...else被不叫,这是当它所有失败三次.
| 归档时间: |
|
| 查看次数: |
619 次 |
| 最近记录: |