首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >scl启用python27 bash

scl启用python27 bash
EN

Stack Overflow用户
提问于 2013-05-19 12:33:33
回答 6查看 33.1K关注 0票数 28

在Redhat 6服务器上的cron中,我遇到了一个每隔30分钟运行一次的shell脚本。shell脚本基本上只是一个运行python脚本的命令。

服务器上的原生版本python是2.6.6,但此特定脚本所需的python版本是python 2.7+。我可以通过使用"scl“命令在命令行上轻松地运行这个命令(这个示例包含python -V命令来显示版本更改):

代码语言:javascript
复制
$ python -V
Python 2.6.6
$ scl enable python27 bash
$ python -V
Python 2.7.3

此时,我可以在命令行上运行python2.7.3脚本,没有问题。

问题来了。

当您发出scl enable python27 bash命令时,它将启动一个新的bash shell会话,这个会话(同样)对于交互式命令行工作来说是很好的。但是,当在shell脚本中执行此操作时,只要运行bash命令,脚本就会因为新会话而退出。

下面是失败的shell脚本:

代码语言:javascript
复制
#!/bin/bash
cd /var/www/python/scripts/
scl enable python27 bash
python runAllUpserts.py >/dev/null 2>&1

只要它到达第4行,它就会立即停止,因为" bash“会将它从脚本中弹出,并进入一个新的bash shell。所以它永远看不到我需要它运行的实际python命令。

另外,如果每30分钟运行一次,每次都会添加一个新的bash,这是另一个问题。

由于几个原因,我现在不愿意在服务器上将原生python版本更新到2.7.3。Redhat yum repos还没有python 2.7.3,手动安装将在yum更新系统之外。据我所知,yum本身运行在python 2.6.x上。

我在这里找到了使用scl的方法。

http://developerblog.redhat.com/2013/02/14/setting-up-django-and-python-2-7-on-red-hat-enterprise-6-the-easy-way/

EN

回答 6

Stack Overflow用户

发布于 2013-07-02 17:07:08

在SCL环境中在一个文档中做所有事情是最好的选择,IMO:

代码语言:javascript
复制
scl enable python27 - << \EOF
cd /var/www/python/scripts/
python runAllUpserts.py >/dev/null 2>&1
EOF

另一种方法是在scl环境中直接运行第二个命令(这是唯一使用Python的命令):

代码语言:javascript
复制
cd /var/www/python/scripts/
scl enable python27 "python runAllUpserts.py >/dev/null 2>&1"
票数 27
EN

Stack Overflow用户

发布于 2015-05-21 14:10:16

scl enable python27 bash激活了一个python虚拟环境。

您可以在bash脚本中执行此操作,只需获取虚拟环境的启用脚本,即SCL包的启用脚本,该脚本位于/opt/rh/python27/enable

示例:

代码语言:javascript
复制
#!/bin/bash
cd /var/www/python/scripts/
source /opt/rh/python27/enable
python runAllUpserts.py >/dev/null 2>&1
票数 20
EN

Stack Overflow用户

发布于 2013-10-27 02:47:46

直接使用python脚本不是最简单的吗?test_python.py

代码语言:javascript
复制
#!/usr/bin/env python

import sys
f = open('/tmp/pytest.log','w+')
f.write(sys.version)
f.write('\n')
f.close()

然后在您的crontab中:

代码语言:javascript
复制
2 * * * *    scl python27 enable $HOME/test_python.py

确保将test_python.py设置为可执行文件。

另一种选择是调用调用python的shell脚本。test_python.sh

代码语言:javascript
复制
#/bin/bash
python test_python.py

在您的crontab中:

代码语言:javascript
复制
2 * * * *   scl python27 enable $HOME/test_python.sh
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16631461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档