小编Kur*_*eek的帖子

从环境文件中读取环境变量

我想在本地环境中运行Python脚本,该脚本通常在Docker容器中运行.在docker-compose.yml指定了一个env_file看上去(部分)如下所示:

DB_ADDR=rethinkdb
DB_PORT=28015
DB_NAME=ipercron
Run Code Online (Sandbox Code Playgroud)

为了在本地运行,我将这些行转换为

os.environ['DB_ADDR'] = 'rethinkdb'
os.environ['DB_PORT'] = '28015'
os.environ['DB_NAME'] = 'ipercron'
Run Code Online (Sandbox Code Playgroud)

我可以编写我的解析器,但我想知道是否有任何现有的模块/工具可以从配置文件中读取环境变量?

python docker

28
推荐指数
8
解决办法
4万
查看次数

如何使用Python的RotatingFileHandler

我正在尝试对logging模块RotatingFileHandler进行如下测试:

import logging
from logging.handlers import RotatingFileHandler

# logging.basicConfig(filename="example.log", level=logging.DEBUG)

logger = logging.getLogger('my_logger')
handler = RotatingFileHandler("my_log.log", maxBytes=2000, backupCount=10)
logger.addHandler(handler)

for _ in range(10000):
    logger.debug("Hello, world!")
Run Code Online (Sandbox Code Playgroud)

但是,在logging.basicConfig注释掉行的情况下,生成的my_log.log文件不包含任何数据:

在此输入图像描述

如果我在该行中发表评论logging.basicConfig(filename="example.log", level=logging.DEBUG),我会得到my_log.log带有编号后缀的预期文件.但是,还有example.log一个(相对)大文件:

在此输入图像描述

如何设置日志记录以便它只生成my_log.log文件,而不是大example.log文件?

python logging

23
推荐指数
4
解决办法
3万
查看次数

在docker-compose上出现"已经在使用的地址"错误

我正在尝试启动几个docker容器docker-compose up,但是我收到以下(部分)错误消息:

Recreating 1faf02f5d67e_1faf02f5d67e_1faf02f5d67e_1faf02f5d67e_1faf02f5d67e_ipercroncompose_rabbitmq_1

ERROR: for rabbitmq  Cannot start service rabbitmq: driver failed programming external connectivity on endpoint ipercroncompose_rabbitmq_1 (a8ded956e30b922289614bbbc4e4fb773c58688d395895b575a88b638592df94): Error starting userland proxy: listen tcp 0.0.0.0:5672: bind: address already in use
ERROR: Encountered errors while bringing up the project.
Run Code Online (Sandbox Code Playgroud)

根据https://github.com/docker/docker/issues/8714的建议,我尝试了命令

netstat -pna | grep 5672
Run Code Online (Sandbox Code Playgroud)

导致

(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 0.0.0.0:25672           0.0.0.0:*               LISTEN …
Run Code Online (Sandbox Code Playgroud)

docker

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

如何将集成测试(而不是单元测试)应用于Flask RESTful API

[根据/sf/answers/3245896181/,标题应参考集成测试而不是单元测试]

假设我想测试以下Flask API(从这里开始):

import flask
import flask_restful

app = flask.Flask(__name__)
api = flask_restful.Api(app)

class HelloWorld(flask_restful.Resource):
    def get(self):
        return {'hello': 'world'}

api.add_resource(HelloWorld, '/')

if __name__ == "__main__":
    app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)

将此保存flaskapi.py并运行后,在同一目录中运行脚本test_flaskapi.py:

import unittest
import flaskapi
import requests

class TestFlaskApiUsingRequests(unittest.TestCase):
    def test_hello_world(self):
        response = requests.get('http://localhost:5000')
        self.assertEqual(response.json(), {'hello': 'world'})


class TestFlaskApi(unittest.TestCase):
    def setUp(self):
        self.app = flaskapi.app.test_client()

    def test_hello_world(self):
        response = self.app.get('/')

if __name__ == "__main__":
    unittest.main()
Run Code Online (Sandbox Code Playgroud)

两个测试都通过了,但对于第二个测试(在TestFlaskApi类中定义),我还没有弄清楚如何断言JSON响应是否符合预期(即{'hello': 'world'}).这是因为它是一个实例flask.wrappers.Response(可能基本上是一个Werkzeug响应对象(参见http://werkzeug.pocoo.org/docs/0.11/wrappers/)),但我找不到相应的Response …

python integration-testing werkzeug flask flask-restful

22
推荐指数
3
解决办法
3万
查看次数

在 VS 代码中进行短绒检查不适用于跨多个文件的包?

我已经在 MacOS 上的 Visual Studio Code 中安装了 Go 扩展(版本 0.11.4):

在此处输入图片说明

但是,我发现 linter 不会“拾取”在同一个包中定义的函数,而是在不同的文件中。例如,如果我在同一个目录中的文件创建foo.go

package foobar

import "fmt"

func main() {
    fmt.Println(SayHello())
}
Run Code Online (Sandbox Code Playgroud)

和文件bar.go

package foobar

func SayHello() string {
    return "Hello, world!"
}
Run Code Online (Sandbox Code Playgroud)

然后在foo.go我收到一个 linter 错误SayHelloundeclared name

在此处输入图片说明

我在这里(https://github.com/golang/lint/issues/57)读到了一个类似的问题,但由于这个问题已经五年了,我认为它现在可能已经解决了?或者golint根本不能跨多个文件工作?

go golint visual-studio-code

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

如何将(x,y)屏幕坐标转换为LatLng(谷歌地图)

我正在使用谷歌地图和Leap Motion实现一个应用程序和我现在想要的,我有点卡住,是一种将(x,y)屏幕坐标转换为Google Maps LatLng对象的方法.

我想实现这一目标,例如,在用户使用Leap Motion指向的位置开始全景(街景视图).

我知道fromPointToLatLng函数的存在,但我不知道使用它的正确方法是什么,以及如何将我的x和y坐标转换为lat lng变量.

你能帮我解决这个问题吗?

javascript google-maps google-maps-api-3

17
推荐指数
3
解决办法
3万
查看次数

在Docker中,"来自守护程序的错误响应:无法选择要广告的IP地址,因为此系统在不同的接口上有多个地址"

我的问题类似于docker swarm init无法选择IP地址错误,但我发现接受的答案有些模糊,所以我再问一遍.在尝试

docker swarm init
Run Code Online (Sandbox Code Playgroud)

我正在发送错误消息

来自守护程序的错误响应:无法选择要广告的IP地址,因为此系统在不同的接口上有多个地址(enp1s0上为192.168.130.117,wlp2s上为192.168.130.89) - 使用--advertise-addr指定一个地址

这可能是什么原因?我目前正在运行VPN(OneClickVPN); 那是问题吗?

另外,为了指定一个地址--advertise-addr,我想了解更多有关消息中给出的地址的信息.我怎么能这样做?

ip docker docker-swarm

16
推荐指数
2
解决办法
8040
查看次数

如何在Python 3中使用slugify?

我正在尝试使用我安装的slugifypip3 install slugify.但是,在解释器中,如果我尝试敲击字符串,'hello'我会看到以下内容:

Python 3.5.2 (default, Nov 17 2016, 17:05:23) 
Type "copyright", "credits" or "license" for more information.

IPython 5.1.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: from slugify import slugify

In [2]: slugify('hello')
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-2-a58110f37579> in <module>()
----> 1 slugify('hello') …
Run Code Online (Sandbox Code Playgroud)

python slugify

16
推荐指数
1
解决办法
8917
查看次数

在Python中,如何在except块中插入调试器并访问异常实例?

我正在尝试做类似以下的事情:

try:
    1/0
except ZeroDivisionError as e:
    import ipdb; ipdb.set_trace()
Run Code Online (Sandbox Code Playgroud)

当我进入调试器时,我希望异常实例e位于我的本地范围内.但是,如果我运行此脚本,我发现情况并非如此:

Kurts-MacBook-Pro-2:Scratch kurtpeek$ python debug_exception.py
--Return--
None
> /Users/kurtpeek/Documents/Scratch/debug_exception.py(4)<module>()
      2         1/0
      3 except ZeroDivisionError as e:
----> 4         import ipdb; ipdb.set_trace()

ipdb> dir()
['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__return__', '__spec__', 'ipdb']
ipdb> e
*** NameError: name 'e' is not defined
Run Code Online (Sandbox Code Playgroud)

为什么e没有定义?我目前正在使用print语句来查找属性e,但我觉得应该可以交互式地进行.

python

15
推荐指数
2
解决办法
371
查看次数

在Spyder中,使用Matplotlib和交互式缩放等绘图

我最近从Enthought Canopy切换到Anaconda,并使用Spyder IDE.我注意到当我绘制一些数据时,

import matplotlib.pyplot as plt
plt.figure()
plt.plot(rigs2)
plt.ion()
plt.show()
Run Code Online (Sandbox Code Playgroud)

它在IPython控制台中显示为内联图:

plt.plot()命令的结果

但是,在Enthought中,情节会出现在一个带有缩放,后退和前进按钮的单独窗口中.Spyder有没有办法实现同样的目标?

python plot matplotlib spyder

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