我正在尝试在Python代码中执行shell脚本。到目前为止,一切看起来都不错。
下面是我将执行shell脚本的Python脚本。现在举个例子,这里是一个简单的Hello World shell脚本。
jsonStr = '{"script":"#!/bin/bash\\necho Hello world 1\\n"}'
j = json.loads(jsonStr)
shell_script = j['script']
print "start"
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
else:
print stdout
print "end" # Shell script ran fine.
现在我正在寻找的是,无论出于何种原因,无论何时我从Python代码执行我的shell脚本,并且无论出于什么原因它都失败了。那意味着stderr
将不会为空。所以现在我想再次重试执行shell脚本,假设在睡眠几毫秒之后呢?
如果shell脚本执行失败,意味着是否有可能实现重试机制?我可以重试5到6次吗?意思是可以配置这个号码吗?
答案 0 :(得分:5)
from time import sleep
MAX_TRIES = 6
# ... your other code ...
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
答案 1 :(得分:0)
这样的事情可能是:
maxRetries = 6
retries = 0
while (retries < maxRetries):
doSomething ()
if errorCondition:
retries += 1
continue
break
答案 2 :(得分:0)
使用装饰器怎么样?似乎是一种非常明确的方式。 你可以在这里阅读https://wiki.python.org/moin/PythonDecoratorLibrary。 (重试装饰者)