如何在python脚本中引用openshift的env目录?

时间:2012-11-05 01:24:48

标签: python cron openshift

OpenShift有这些默认目录:

# $_ENV['OPENSHIFT_INTERNAL_IP']  - IP Address assigned to the application
# $_ENV['OPENSHIFT_GEAR_NAME']  - Application name
# $_ENV['OPENSHIFT_GEAR_DIR']   - Application dir
# $_ENV['OPENSHIFT_DATA_DIR']  - For persistent storage (between pushes)
# $_ENV['OPENSHIFT_TMP_DIR']   - Temp storage (unmodified files deleted after 10 days)

如何在python脚本中引用它们? 示例脚本“在日志目录中创建了一个日志文件并登录数据目录?

from time import strftime

now= strftime("%Y-%m-%d %H:%M:%S")
fn  = "${OPENSHIFT_LOG_DIR}/test.log"
fn2 = "${OPENSHIFT_DATA_DIR}/test.log"
#fn  = "test.txt"

input = "appended text " + now + " \n"

with open(fn, "ab")  as f: 
       f.write(input)
with open(fn2, "ab") as f: 
       f.write(input)

这些脚本可以和cron一起使用吗?

编辑BASH文件:

#! /bin/bash

#date >> ${OPENSHIFT_LOG_DIR}/new.log
source $OPENSHIFT_HOMEDIR/python-2.6/virtenv/bin/activate
python file.py
date >> ${OPENSHIFT_DATA_DIR}/new2data.log

2 个答案:

答案 0 :(得分:3)

import os

os.getenv("OPENSHIFT_INTERNAL_IP") 

应该有用。

所以在你的例子中,修改为: -

import os
OPENSHIFT_LOG_DIR = os.getenv("OPENSHIFT_LOG_DIR") 
fn  = os.path.join(OPENSHIFT_LOG_DIR, "test.log")

而且,是的,你可以通过引用你的bash脚本来调用这个python脚本,如果你想...就像这样: -

 #!/bin/bash
 date >> ${OPENSHIFT_LOG_DIR}/status.log
 chmod +x status
 cd ${OPENSHIFT_REPO_DIR}/wsgi/crawler
 nohup python file.py 2>&1 &

答案 1 :(得分:2)

这些变量OPENSHIFT_ *在OpenShift上作为环境变量提供 - 所以$ _ENV [“OPENSHIFT_LOG_DIR”]是一个在php脚本中获取值的示例。

在python中,等价物只是os.getenv(“OPENSHIFT_LOG_DIR”)。 对上面的Calvin的帖子进行了编辑并提交了'em。

Re:file.py存在的问题 - 使用os.getenv(“OPENSHIFT_REPO_DIR”)作为基本目录,其中所有代码都位于运行应用程序的齿轮上。 因此,如果您的文件位于.openshift / misc / file.py - 那么只需使用:

os.path.join(os.getenv("OPENSHIFT_REPO_DIR"), ".openshift", "misc", "file.py")  

获得完整路径。

或者在bash中,等价物是:

$OPENSHIFT_REPO_DIR/.openshift/misc/file.py   

HTH