Noob在这里提问。我每隔2小时为Python脚本安排cron
作业,但我希望脚本在48小时后停止运行,这不是cron
的功能。为了解决这个问题,我使用计数标记x
在文本文件中记录脚本末尾的执行次数,并在脚本开头打开文本文件,只有在count小于n
。
但是,无论条件如何,我的脚本似乎总是运行。这是我尝试过的一个例子:
with open("curl-output.txt", "a+") as myfile:
data = myfile.read()
finalrun = "xxxxx"
if data != finalrun:
[CURL CODE]
with open("curl-output.txt", "a") as text_file:
text_file.write("x")
text_file.close()
我想我在这里错过了一些简单的东西。请告知是否有更好的方法来实现这一目标。提前谢谢。
答案 0 :(得分:2)
您的原始代码存在的问题是您在a+
模式下打开文件,这似乎将搜索位置设置为文件的末尾(在您之后立即尝试print(data)
读取文件)。如果您使用r
代替它,它会起作用。 (我不确定它应该是怎样的。This answer声明它应该写在最后,但从头开始读。documentation isn&# 39;非常清楚)。
一些建议:您可以只检查数据的长度("xxxxx"
),而不是与if len(data) < 5
字符串进行比较。或者,如建议的那样,使用pickle存储一个数字,可能如下所示:
import pickle
try:
with open("curl-output.txt", "rb") as myfile:
num = pickle.load(myfile)
except FileNotFoundError:
num = 0
if num < 5:
do_curl_stuff()
num += 1
with open("curl-output.txt", "wb") as myfile:
pickle.dump(num, myfile)
关于原始代码的另外两件事:您使第一个with
块大于它需要的块。在您将字符串读入data
后,您就不再需要该文件对象,因此您可以从除data = myfile.read()
之外的所有内容中删除一级缩进。
此外,您不需要手动关闭text_file
。 with
会为您做到这一点(这就是重点)。
答案 1 :(得分:1)
那么可能会有一个行尾跳转\n
字符,这会使您的文件包含xx\n
而不仅仅是xx
。这可能就是你的病情不起作用的原因:)。
修改强>
如果通过python命令行键入
会发生什么open('filename.txt', 'r').read() # where filename is the name of your file
您将能够看到是否有\n
答案 2 :(得分:1)
使用at命令进行作业调度的声音更多?
有关不同的作业调度机制,请参阅http://www.ibm.com/developerworks/library/l-job-scheduling/。
答案 3 :(得分:1)
对我来说很明显的第一个错误是,即使data == finalrun
,您也要附加到该文件。因此,当data == finalrun
时,您不会运行卷曲但是您确实附加了另一个&#39; x&#39;到文件。在下次运行时,data
将再次不等于finalrun
,因此它将继续执行curl代码。
解决方案当然是在if语句下嵌套附加到文件的代码。
答案 4 :(得分:0)
尝试将此条件与if子句一起使用。
if data.count('x')==24
data
字符串可能包含无关数据行的新行字符。检查repr(data)
以查看它是否真的是24 x。