小编n8h*_*rie的帖子

为什么使用/ usr/bin/env会破坏我的Python导入?

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,果然脚本运行正常.

所以我的问题有两个:

  1. 为什么使用/usr/bin/env python破坏我的导入?
  2. 如何在不使用的情况下避免此问题/usr/local/bin/python

python shebang python-2.7

5
推荐指数
1
解决办法
2496
查看次数

如何通过日志记录恢复 iPython 0.13.2 会话

我最近更频繁地使用 iPython (0.13.2),并且日志记录似乎是一个很棒的功能——如果我能让它正常工作的话。

目前,我可以通过 %magic 命令启动并指定日志文件ipython --logfile ~/path/fake.log,甚至可以在 iPython 会话的中间使用 %magic 命令%logstart ~/path/fake.log

但是,我似乎无法从日志文件恢复会话,这似乎在一定程度上违背了目的。我已经搜索过 Google 和 SO,但是 SO 或文档中推荐的解决方案似乎都不能正常工作。

我努力了:

  • 来自重击
    • ipython -log ~/path/fake.log来源,结果[TerminalIPythonApp] Unrecognized flag: '-log':)
    • ipython -logplay ~/path/fake.log来源和许多其他人,结果[TerminalIPythonApp] Unrecognized flag: '-logplay':)
    • ipython --logfile=~/path/fake.log,结果:新日志开始,上一个会话的变量未定义)
  • 来自 iPython
    • %logstart ~/path/fake.log append,结果:旧日志继续但未加载,上一个会话中的变量未定义)

两个部分工作(因为它们尝试导入日志文件)但似乎不用于此目的是:

  • 来自bash:(ipython -i ~/path/fake.log结果:如果会话导入和工作中没有错误。如果有任何错误,则不会导入并且变量仍然不可用。日志记录不会恢复。)。
  • 来自 ipython:(%run ~/path/fake.log没有来源,只是猜测和尝试。结果:与上面相同。如果没有错误并且变量为 GTG,则运行文件。如果有错误,则不起作用。不恢复日志记录。)

iPython 0.13.2 中是否有任何方法可以有效地“从上次中断的地方开始”恢复会话?感谢您的任何帮助,您可以提供。

python logging ipython

5
推荐指数
1
解决办法
3260
查看次数

从 espduino 超时到 Flask

我正在使用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 然后超时。

为什么

  • 确保Flask 读取所有表单数据-> 没有区别
  • 使用 gunicorn 而不是内置的 Flask 服务器 -> 没有区别
  • 将响应内容类型显式更改为“text/html”-> 没有区别 …

python arduino flask

5
推荐指数
1
解决办法
1981
查看次数

Python 解码 JSON 中的嵌套 JSON

我正在处理一个 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)

python recursion json

5
推荐指数
1
解决办法
1万
查看次数

在执行前测试 perl -pi -e one-liner 的最佳方法?

我不知道任何 Perl,但我偶尔会使用“ perl pie ”( perl -pi -e) 进行批量正则表达式查找和替换,例如更改ae文件夹中的所有 .txt 文件perl -pi -e 's|a|e|g' *.txt

有什么方法可以进行“试运行”,以便我可以预览更改?我经常使用带有正/负前瞻/后视、组引用等的中等复杂的正则表达式,而且我通常不是 100% 确定我在第一次运行时就正确。有像rename.pl的标志这样的东西会很棒,它不会改变任何东西,只输出本来会做出的改变。-n

目前,我的策略是只使用ack,它接受 Perl 正则表达式,以确保我的匹配字符串是正确的,然后从那里开始。有没有更好的办法?任何像rename -n什么?

perl尽管我偏爱它的正则表达式格式,但也可以接受其他东西,除非我遗漏了一些很棒的东西。

非常感谢!

regex perl

3
推荐指数
1
解决办法
954
查看次数

使用python列表理解过滤json响应

给定一个带有许多键(属性?)的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)

python json list-comprehension

2
推荐指数
1
解决办法
4393
查看次数