OSX 10.8.2上的Python 2.7.3
我正在编写一个导入markdown模块的脚本.我使用了#!/usr/bin/env pythonshebang来实现便携性.当我直接在shell中运行脚本时,脚本运行正常./myscript.py arg1
当我从(登录)shell外部运行脚本时,例如通过AppleScript do shell script "/path/to/myscript.py " & quoted form of arg1,它失败了
myscript.py", line 8, in <module>
import markdown
ImportError: No module named markdown
Run Code Online (Sandbox Code Playgroud)
我想这可能是shebang的一个问题,所以我将shebang改为我的python位置#!/usr/local/bin/python,果然脚本运行正常.
所以我的问题有两个:
/usr/bin/env python破坏我的导入?/usr/local/bin/python?我最近更频繁地使用 iPython (0.13.2),并且日志记录似乎是一个很棒的功能——如果我能让它正常工作的话。
目前,我可以通过 %magic 命令启动并指定日志文件ipython --logfile ~/path/fake.log,甚至可以在 iPython 会话的中间使用 %magic 命令%logstart ~/path/fake.log。
但是,我似乎无法从日志文件恢复会话,这似乎在一定程度上违背了目的。我已经搜索过 Google 和 SO,但是 SO 或文档中推荐的解决方案似乎都不能正常工作。
我努力了:
%logstart ~/path/fake.log append(源,结果:旧日志继续但未加载,上一个会话中的变量未定义)两个部分工作(因为它们尝试导入日志文件)但似乎不用于此目的是:
ipython -i ~/path/fake.log源,结果:如果会话导入和工作中没有错误。如果有任何错误,则不会导入并且变量仍然不可用。日志记录不会恢复。)。%run ~/path/fake.log没有来源,只是猜测和尝试。结果:与上面相同。如果没有错误并且变量为 GTG,则运行文件。如果有错误,则不起作用。不恢复日志记录。)iPython 0.13.2 中是否有任何方法可以有效地“从上次中断的地方开始”恢复会话?感谢您的任何帮助,您可以提供。
我正在使用esp8266为带有此库的 Arduino 提供 WiFi 。我已将其正确设置为 POST 到Pushover以及requestbin,并且在调试输出和这些工具的接口之间,我可以验证请求数据是否正确发布,并且 esp8266 / arduino 单元的响应状态代码正确显示200。
我想测试设置的可靠性,所以我想我会转向 Flask。我在 for 循环中将 100 个请求从 espduino POST 到在0.0.0.0:5000. POST 包含一个测试字符串(尝试粗略衡量简单的数据完整性,确保字符串通过未损坏的)以及正在发送的循环数(例如,第一个循环中的 0 ... 最后一个循环中的 99) . Flask 会跟踪这些请求并更新其输出以显示哪些请求正确通过,哪些没有通过。
除了一件事之外,设置运行良好:模块在每次请求后超时。每个 POST 似乎都有效,Flask 适当地更新输出,但 espduino 为每个请求花费整整 5 秒(默认超时)并说它得到了响应代码0.
所以重申一下情况:我的 espduino 设置正确 POST 并从 requestb.in 和 pushover.net 获得 200 响应,但使用我的本地 Flask 服务器 POST 然后超时。
我正在处理一个 API,不幸的是它返回格式错误(或“奇怪的格式”,而是——感谢@fjarri)JSON,但从积极的一面来看,我认为这可能是我学习一些有关递归以及JSON。这是我用来记录锻炼的应用程序,我正在尝试制作一个备份脚本。
我可以很好地接收 JSON,但即使在requests.get(api_url).json()(或json.loads(requests.get(api_url).text)) 之后,其中一个值仍然是 JSON 编码的字符串。幸运的是,我只需json.loads()字符串即可正确解码为字典。特定的键是可预测的:timezone_id,而其值会有所不同(因为数据已记录在多个时区)。例如,解码后,可能是:dumped to file as "timezone_id": {\"name\":\"America/Denver\",\"seconds\":\"-21600\"}",或loaded into Python as'timezone_id': '{"name":"America/Denver","seconds":"-21600"}'
问题是我使用这个 API 来检索相当数量的数据,其中有多层字典和列表,并且双编码timezone_id发生在多个级别。
这是我迄今为止所做的一些示例数据的工作,但看起来我离基础还很远。
#! /usr/bin/env python3
import json
from pprint import pprint
my_input = r"""{
"hasMore": false,
"checkins": [
{
"timestamp": 1353193745000,
"timezone_id": "{\"name\":\"America/Denver\",\"seconds\":\"-21600\"}",
"privacy_groups": [
"private"
],
"meta": {
"client_version": "3.0",
"uuid": "fake_UUID"
},
"client_id": "fake_client_id",
"workout_name": "Workout (Nov 17, 2012)",
"fitness_workout_json": {
"exercise_logs": …Run Code Online (Sandbox Code Playgroud) 我不知道任何 Perl,但我偶尔会使用“ perl pie ”( perl -pi -e) 进行批量正则表达式查找和替换,例如更改a为e文件夹中的所有 .txt 文件perl -pi -e 's|a|e|g' *.txt。
有什么方法可以进行“试运行”,以便我可以预览更改?我经常使用带有正/负前瞻/后视、组引用等的中等复杂的正则表达式,而且我通常不是 100% 确定我在第一次运行时就正确。有像rename.pl的标志这样的东西会很棒,它不会改变任何东西,只输出本来会做出的改变。-n
目前,我的策略是只使用ack,它接受 Perl 正则表达式,以确保我的匹配字符串是正确的,然后从那里开始。有没有更好的办法?任何像rename -n什么?
perl尽管我偏爱它的正则表达式格式,但也可以接受其他东西,除非我遗漏了一些很棒的东西。
非常感谢!
给定一个带有许多键(属性?)的json对象,如:
[{'name': 'Bob', 'infos': {'spam': 'eggs', 'foo': 'bar'}},
{'name': 'Tom'},
{'name': 'Lisa', 'infos': {'spam': 'qux', 'foo': 'baz'}}
...]
Run Code Online (Sandbox Code Playgroud)
我希望使用列表推导来过滤掉条目 entry['infos']['spam'] == 'eggs'
如果可能的话,我更喜欢列表理解,但到目前为止我唯一的解决方案是使用多个.get()s,最远离树的最远的那个(KeyError通过False在它到达之前做出声明来避免s ).
例如,
# Will obviously fail with KeyError
[each for each in my_json if each['infos']['spam'] == 'eggs']
# Works but requires a separate / additional `.get()`, and only works
# because it is returning False before it evaluates all conditions
[each for each in my_json if each.get('infos') and each.get('infos').get('spam') == 'eggs'] …Run Code Online (Sandbox Code Playgroud)