我想在本地环境中运行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)
我可以编写我的解析器,但我想知道是否有任何现有的模块/工具可以从配置文件中读取环境变量?
我正在尝试对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文件?
我正在尝试启动几个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) [根据/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 …
我已经在 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 错误SayHello是undeclared name:
我在这里(https://github.com/golang/lint/issues/57)读到了一个类似的问题,但由于这个问题已经五年了,我认为它现在可能已经解决了?或者golint根本不能跨多个文件工作?
我正在使用谷歌地图和Leap Motion实现一个应用程序和我现在想要的,我有点卡住,是一种将(x,y)屏幕坐标转换为Google Maps LatLng对象的方法.
我想实现这一目标,例如,在用户使用Leap Motion指向的位置开始全景(街景视图).
我知道fromPointToLatLng函数的存在,但我不知道使用它的正确方法是什么,以及如何将我的x和y坐标转换为lat lng变量.
你能帮我解决这个问题吗?
我的问题类似于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,我想了解更多有关消息中给出的地址的信息.我怎么能这样做?
我正在尝试使用我安装的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) 我正在尝试做类似以下的事情:
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,但我觉得应该可以交互式地进行.
我最近从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控制台中显示为内联图:
但是,在Enthought中,情节会出现在一个带有缩放,后退和前进按钮的单独窗口中.Spyder有没有办法实现同样的目标?
python ×6
docker ×3
docker-swarm ×1
flask ×1
go ×1
golint ×1
google-maps ×1
ip ×1
javascript ×1
logging ×1
matplotlib ×1
plot ×1
slugify ×1
spyder ×1
werkzeug ×1