我正在尝试从环境变量中读取python脚本中的字典。
这是我的python脚本的代码:
desired_cap_default = [
{'platform': 'Windows 7', 'browserName': 'firefox', 'version': '24.0'},
{'platform': 'OS X 10.10', 'browserName': 'chrome', 'version': '45.0'},
{'platform': 'Windows XP', 'browserName': 'chrome', 'version': '40.0'},
{'platform': 'OS X 10.10', 'browserName': 'safari', 'version': '8.0'},
# {'platform': 'Windows XP', 'browserName': 'firefox', 'version': '10.0', 'screenResolution': '1600x1200',
# 'videoUploadOnPass': False, 'commandTimeout': 120}
]
browser = os.getenv('TESTING_BROWSERS', desired_cap_default)
这就是我如何指定环境变量(但没有将其识别为字典)
TESTING_BROWSERS="[{'platform': 'Windows 7', 'browserName': 'firefox', 'version': '24.0'}, \
{'platform': 'OS X 10.10', 'browserName': 'chrome', 'version': '45.0'}, \
{'platform': 'Windows XP', 'browserName': 'chrome', 'version': '40.0'}, \
{'platform': 'OS X 10.10', 'browserName': 'safari', 'version': '8.0'}, ]"
任何人都可以帮我弄清楚我错过了什么吗?在此先感谢你们
答案 0 :(得分:3)
这里的json对象被表示为字符串。您现在需要使用json模块使其成为正确的Python字典。
你的json中也有一个错误,你的结尾有逗号。
此外,为了使用json模块,你应该使用双引号然后用单引号括起来。
如果要将它们设置为环境变量,我也不会看到“\”。但是,如果他们在那里,他们也将在你的字符串中:
\\\n
json模块将很难实现。在这种情况下你可以做的是,如果你真的想要那些斜杠,请确保在使用字符串上的replace方法执行json.loads
命令之前删除它们。所以,事实上你可以这样做:
browser = json.loads(os.getenv('TESTING_BROWSERS', v).replace("\\\n", ""))
以下是两个例子。一个是我对json删除斜线的修改,另一个没有删除:
import json
a = '[{"platform": "Windows 7", "browserName": "firefox", "version": "24.0"}, {"platform": "OS X 10.10", "browserName": "chrome", "version": "45.0"}, {"platform": "Windows XP", "browserName": "chrome", "version": "40.0"}, {"platform": "OS X 10.10", "browserName": "safari", "version": "8.0"}]'
print(json.loads(a))
输出:
[{u'platform': u'Windows 7', u'browserName': u'firefox', u'version': u'24.0'}, {u'platform': u'OS X 10.10', u'browserName': u'chrome', u'version': u'45.0'}, {u'platform': u'Windows XP', u'browserName': u'chrome', u'version': u'40.0'}, {u'platform': u'OS X 10.10', u'browserName': u'safari', u'version': u'8.0'}]
现在,有了斜线。
请记住,正如我所提到的,你必须至少修改你的引号并删除该逗号。
>>> import json
>>> browser = json.loads(os.getenv('TESTING_BROWSERS', v).replace("\\\n", ""))
>>> print(browser)
[{u'platform': u'Windows 7', u'browserName': u'firefox', u'version': u'24.0'}, {u'platform': u'OS X 10.10', u'browserName': u'chrome', u'version': u'45.0'}, {u'platform': u'Windows XP', u'browserName': u'chrome', u'version': u'40.0'}, {u'platform': u'OS X 10.10', u'browserName': u'safari', u'version': u'8.0'}]
以下是有关json模块的信息:
Python 2
https://docs.python.org/2/library/json.html
Python 3
答案 1 :(得分:2)
您可以使用ast
模块。
TESTING_BROWSERS = "[{'platform': 'Windows 7', 'browserName': 'firefox', 'version': '24.0'}, \
{'platform': 'OS X 10.10', 'browserName': 'chrome', 'version': '45.0'}, \
{'platform': 'Windows XP', 'browserName': 'chrome', 'version': '40.0'}, \
{'platform': 'OS X 10.10', 'browserName': 'safari', 'version': '8.0'}, ]"
import ast
my_dict = ast.literal_eval(TESTING_BROWSERS)
答案 2 :(得分:1)
它被识别为字符串。您需要将其评估为python代码,以便从中创建字典。
import ast
brower_dict = ast.literal_eval(brower)
ast.literal_eval
比内置eval
更受限制,但从不受信任的来源使用是安全的,因为它无法执行任意代码。