python定时器用法 + 获取脚本所在绝对路径 + 定义日志格式 + shell将脚本直接启动到后

python定时器用法 + 获取脚本所在绝对路径 + 定义日志格式 的测试代码

如果用python写好一个有定时器的脚本后,如果脚本里还读了配置文件,那么配置文件路径如果写死的话,有一天要换了存放目录的话,需要修改脚本的配置文件路径,而且每次都要到脚本所在路径用 nohup 启动到后台很麻烦。
用 os.path.split(os.path.realpath(sys.argv[0]))[0] 来获取文件所在的绝对路径,配置文件同样扔到和它同级,这样就可以在任意地方启动,一劳永逸~~~

此用法站在运维常用的角度思考,放到任意路径在任何路径下都能调用,解决路径不对问题。

python 脚本

vim test_parameters.py
#!/usr/bin/python
# -*- coding:utf-8 -*-
#########################
import threading
import logging
import time
import os,sys
# 获取脚本所在路径
location_path = os.path.split(os.path.realpath(sys.argv[0]))[0]
# 定义日志格式
logging.basicConfig(level=logging.DEBUG,
                    format=‘%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s ------->   %(message)s‘,
                    datefmt=‘%a, %d %b %Y %H:%M:%S‘,
                    filename=‘%s/logs/test_timer.log‘%location_path,  # 将日志打印到脚本所在路径下
                    filemode=‘a‘)

#测试带参数的函数用法,函数的参数必须用 [ ]
def Test_Parameters(path):
  logging.info("这是本脚本所在路径: %s" % path)
  global timer
  timer = threading.Timer(60, Test_Parameters,[path])  #每60秒运行一次
  timer.start()

# 不带参数的用法
def Test_Nop():
  logging.info("Hello world...")
  global timer
  timer = threading.Timer(3.0,Test_Nop)  #每三秒运行一次
  timer.start()

if __name__ == "__main__":
  timer = threading.Timer(10,Test_Parameters,[location_path])
  timer.start()

    #测试Test_Nop()
    #timer = threading.Timer(10,Test_Nop)  # 10秒后开始运行 Test_Nop()
  #timer.start()

shell 脚本启动停止

#!/bin/bash
pypath=$(cd "$(dirname "$0")"; pwd)    # 获取脚本所在路径
PID=`ps -ef | grep test_parameters | awk ‘!/grep/{print $2}‘`
case $1 in
  start)
    nohup python $pypath/test_parameters.py &
  ;;
  stop)
    kill -9 $PID
  ;;
  restart)
    kill -9 $PID
    sleep 3
    nohup python $pypath/test_parameters.py &
  ;;
  *)
    echo "$0 [ start | stop | restart ]"
    exit 1
  ;;
esac

原文地址:http://blog.51cto.com/rsddn/2108058

时间: 2024-10-11 21:26:06

python定时器用法 + 获取脚本所在绝对路径 + 定义日志格式 + shell将脚本直接启动到后的相关文章

C#获取程序所在目录路径

方法1:Directory.GetCurrentDirectory().这个方法只能在.NET的完整版中使用,NETCF中不支持该功能,调用时会引发异常.获取的是当前目录,并不一定是真正的路径,跟OpenFile对话框有关联.  不推荐使用. 方法2: System.Windows.Forms.Application.StartupPath 这个方法只能在.NET的完整版中使用,NETCF中不支持该功能,调用时会引发异常. 获取运行程序的路径. 推荐使用 方法3:System.IO.Path.G

python   实现nginx/apache 日志格式的统计脚本

# !/usr/bin/env python # -*- coding:utf8 -*- import sys import re import time import os def main(): months ={ "jan": 1, "Feb": 2, "Mar": 3, "Apr": 4, "May": 5, "Jun": 6, "Jul": 07, &quo

shell通用脚本启动

Linux下shell通用脚本启动jar(微服务) vim app_jar.sh #!/bin/bash #source /etc/profile # Auth:Liucx # Please change these parameters according to your real env. # set Java Home: Remember that dolphin only supports JDK8! JAVA_HOME=/usr/java/jdk1.8.0_162 # applicat

Python获取脚本所在目录的正确方法

http://www.jb51.net/article/49035.htm 文章主要介绍了Python获取脚本所在目录的正确方法 1.以前的方法 如果是要获得程序运行的当前目录所在位置,那么可以使用os模块的os.getcwd()函数. 如果是要获得当前执行的脚本的所在目录位置,那么需要使用sys模块的sys.path[0]变量或者sys.argv[0]来获得.实际上sys.path是Python会去寻找模块的搜索路径列表,sys.path[0]和sys.argv[0]是一回事因为Python会

python 获取脚本所在目录

平时写python经常会想获得脚本所在的目录,例如有个文件跟脚本文件放在一个相对的目录位置,那就可以通过脚本文件的目录找到对应的文件,即使以后脚本文件移到其他地方,脚本也基本不需要改动(相对于写死目录的好处).下面通过一些代码进行一下对比. 这是我写的一段代码在:/root/printfabcd/py/filePath.py Python代码   20 logger.debug("sys.path:"+sys.path[0]) 21 logger.debug("sys.arg

Python获取脚本所在目录的正确方法【转】

1.以前的方法 如果是要获得程序运行的当前目录所在位置,那么可以使用os模块的os.getcwd()函数. 如果是要获得当前执行的脚本的所在目录位置,那么需要使用sys模块的sys.path[0]变量或者sys.argv[0]来获得.实际上sys.path是Python会去寻找模块的搜索路径列表,sys.path[0]和sys.argv[0]是一回事因为Python会自动把sys.argv[0]加入sys.path. 具体来说,如果你在C:\test目录下执行python getpath\get

获得Python脚本所在目录

转自http://blog.chinaunix.net/uid-21961132-id-159389.html 1.? 以前的方法 如果是要获得程序运行的当前目录所在位置,那么可以使用os模块的os.getcwd()函数. 如果是要获得当前执行的脚本的所在目录位置,那么需要使用sys模块的sys.path[0]变量或者sys.argv[0]来获得.实际上sys.path是Python会去寻找模块的搜索路径列表,sys.path[0]和sys.argv[0]是一回事因为Python会自动把sys.

delphi根据进程PID获取程序所在路径的函数(用OpenProcess取得句柄,用GetModuleFileNameEx取得程序名)

uses psapi; {根据进程PID获取程序所在路径的函数}function GetProcessExePath(PID: Cardinal): string;varpHandle: THandle;buf: array[0..MAX_PATH] of Char;begin{获取进程句柄}pHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, PID);{获取进程路径}GetModuleFileN

一点一点学写Makefile(5)-获取文件所在路径

我们在开发一套代码时,应该保证工程放到任何一个目录中均可以编译成功,但是有时候链接库的时候会造成编译错误,本次就会告诉大家如何动态的获得工程所在的绝对路径 代码下载目录 选择Makefile-5 [sql] view plain copy //makefile CROSS = CC = $(CROSS)gcc CXX = $(CROSS)g++ DEBUG = CFLAGS = $(DEBUG) -Wall -c MV = mv -f RM = rm -rf LN = ln -sf TOP_PA