首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行config.ini脚本时无法访问python3

运行config.ini脚本时无法访问python3
EN

Stack Overflow用户
提问于 2020-07-30 11:06:58
回答 2查看 366关注 0票数 0

我有一个运行python3脚本的crontab条目。这个python脚本使用一个config.ini文件来获取一些令牌,以便在脚本中使用。

crontab条目是:

代码语言:javascript
复制
*/15 * * * * /usr/bin/python3 /opt/scripts/tf_state_backup/tf_state_backup.py >> ~/cron.out 2>&1

config.ini文件具有以下内容:

代码语言:javascript
复制
[terraform]
token = <base64 encoded API key>

[gitlab]
token = <base64 encoded API key>

python脚本的相关部分如下:

代码语言:javascript
复制
import configparser

## read config file and decode api keys
config = configparser.ConfigParser()
config.read(os.path.abspath('config.ini'))

tfc_token = base64.b64decode(config['terraform']['token']).decode('utf-8')
gitlab_token = base64.b64decode(config['gitlab']['token']).decode('utf-8')

当它运行时,我可以检查cron.out文件中的任何错误。每次运行时,我都会得到以下错误。

代码语言:javascript
复制
SyntaxError: invalid syntax
Traceback (most recent call last):
  File "/opt/scripts/tf_state_backup/tf_state_backup.py", line 17, in <module>
    tfc_token = base64.b64decode(config['terraform']['token']).decode('utf-8')
  File "/usr/lib64/python3.6/configparser.py", line 959, in __getitem__
    raise KeyError(key)
KeyError: 'terraform'

我检查了以下情况:

  • 确保脚本和配置具有正确的权限& +x权限
  • 运行脚本与在cron选项卡中完全一样,它在没有任何
  • 的情况下运行良好,config.ini是由它的绝对路径而不是相对路径

引用的

在这方面的任何帮助都将是极好的。

EN

回答 2

Stack Overflow用户

发布于 2020-07-30 15:13:24

您应该使用get对象的ConfigParser方法。第一个参数是节名,第二个参数是变量名。如果raw参数设置为True,则特殊字符将被读取为字符串(例如:%)。

我写了一个有用的版本。

test.ini:

代码语言:javascript
复制
[terraform]
token = aGVsbG93b3JsZA==

[gitlab]
token = bm90X2hlbGxvd29ybGQ=

test.py:

代码语言:javascript
复制
import configparser
import base64

config = configparser.ConfigParser()
config.read("test.ini")

tfc_token = base64.b64decode(config.get('terraform', 'token', raw=True)).decode('utf-8')
gitlab_token = base64.b64decode(config.get('gitlab', 'token', raw=True)).decode('utf-8')

print(tfc_token)
print(gitlab_token)

输出:

代码语言:javascript
复制
>>> python3 test.py 
helloworld
not_helloworld

FYI:

  • I已经使用Python3.6.6Linux OS进行测试。
  • i已经在这个站点上生成了base64s:
票数 1
EN

Stack Overflow用户

发布于 2020-07-30 15:14:53

通过将cron作业更新为以下内容,我成功地运行了该任务:

代码语言:javascript
复制
*/15 * * * * cd /opt/scripts/tf_state_backup/ && /usr/bin/python3 /opt/scripts/tf_state_backup/tf_state_backup.py

我可能没有正确地获得配置文件的路径?

不管它现在起作用了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63171835

复制
相关文章

相似问题

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