Python - 失败时重新运行子进程调用

时间:2018-02-06 03:45:51

标签: python python-3.x

我有一个调用子进程的脚本(speedtest-cli)。

该脚本似乎随机失败,并显示以下错误消息: -

ERROR: timed out
ERROR: 'speedtest-cli --share' failed (exit code 1).
Retrieving speedtest.net configuration... Cannot retrieve speedtest configuration
Traceback (most recent call last):
  File "/home/steve/speedtest_dev.py", line 80, in <module>
    data[1] = data[1].strip("'") ##Finish date and time
IndexError: list index out of range

据我所知,这里看起来有两个错误: -

a)Speedtest-cli因超时而失败

ERROR: timed out
ERROR: 'speedtest-cli --share' failed (exit code 1).

b)数据条然后失败,因为没有数据。

Traceback (most recent call last):
  File "/home/steve/speedtest_dev.py", line 80, in <module>
    data[1] = data[1].strip("'") ##Finish date and time
IndexError: list index out of range

我想在可能的情况下捕获第一个错误并在一段时间(60秒?)后重新运行子进程。

我尝试过创建一个函数: -

def run_speedtest():
  outfile = open(dataFile, "w+")
  subprocess.call(["/home/steve/speedtest-cli-extras/speedtest-csv", "--share"], stdout=outfile)
  outfile.close()

然后使用try语句,如: -

try:
  run_speedtest()
except:
  print("1st attempt failed") #for testing only
  time.sleep(60)
  run_speedtest()

出于某种原因,我只设法运行第一部分,当出现错误时,似乎没有运行。然后脚本执行此操作: -

#Separate Values from csv string
with open(dataFile, "r+") as f:
  data = f.read()
  data = data.strip()
  data = data.replace("\t","|")
  f.seek(0)
  f.write(data)
  f.truncate
f.close()

#Open file and  process
with open(dataFile, "r") as g:
  data = g.read()
  data = data.split("|")

写入数据库并在其中一个参数小于定义值时发送电子邮件。

除非最初的run_speedtest()失败,否则一切正常。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

升级最新的python版本后,我遇到了同样的问题,解决方案可以是:

导出PYTHONHTTPSVERIFY = 0

python your_script

虽然对我有用。