我正在用Python编写一个在Linux中使用闭源API的程序.API有时会起作用,有时会出现段错误 - 也会破坏我的程序.但是,如果程序运行10秒钟,它已经过了可能会出现分段并永远运行的点(错误只发生在开头).
我想我需要一些类型的脚本:
启动我的python程序,
等了10秒,
检查python是否仍在运行
如果它正在运行,脚本应该结束自己而不结束python
如果python没有运行,那么重复一遍.
这样的程序可能吗?段错也会杀死剧本吗?
使用argparse(或其他什么?)我希望每个位置参数都有一个带默认值的可选参数.
争论如下:
script.py arg1 arg2 -o 1 arg3 -o 2 arg4 arg5
Run Code Online (Sandbox Code Playgroud)
我希望它将其解析成可用的东西,比如位置参数列表和填充默认值的可选参数列表.例如,如果上例中的Optional的默认值为0:
positional = [arg1, arg2, arg3, arg4, arg5]
optional = [0, 1, 2, 0, 0]
Run Code Online (Sandbox Code Playgroud)
换句话说,parser.add_argument('-o', action='append')不是我想要的,因为我失去了位置参数,每个可选参数都与之相关联.
我正在编写一个包含许多步骤和大量数据的数据分析程序.有时我想在途中保存泡菜,有时候不是.我将把这些保存称为"检查站".
如果咸菜文件是可读的,和一个全局变量PICKLE是True,我可以跳过一些分析步骤.布局代码的一种愚蠢但冗长的方式是这样的:
if PICKLE:
try:
with open('pickle1.pkl', 'rb') as f:
data1 = pickle.load(f)
except:
# do things to generate data1
temp = step1()
data1 = step2(temp)
with open('pickle1.pkl', 'wb') as f:
pickle.dump(data1, f)
else:
# do things to generate data1
temp = step1()
data1 = step2(temp)
Run Code Online (Sandbox Code Playgroud)
这只是我分析中许多人的"检查点",而进入这些"检查点"通常需要的不仅仅是两个步骤.因此,如上所述布置我的代码会产生大量重复的代码.
我可以通过将功能放入功能中来略微改进,但为了强调丑陋,我将展示2个检查点:
def generateData1():
# do things
return data1
def generateData2():
# do things
return data2
if PICKLE:
try:
with open('pickle1.pkl', 'rb') as f:
data1 = pickle.load(f)
except:
data1 = …Run Code Online (Sandbox Code Playgroud)