小编Ser*_*gey的帖子

我可以在Linux下直接将字节写入视频内存,还是有更好的方法将数据输入屏幕?

我教我的儿子编程"正确/艰难",所以我们从C开始,就像真正的男人:)

将文本打印到控制台很有趣,但我仍然记得将我的旧i386切换到320x200x256模式并绘制几个彩色矩形的兴奋......当天就像调用一样简单int 10h然后你只需要写入字节[A000:0000]到在屏幕上绘制像素.

然而,对于现代Linux,这种对硬件的低级访问似乎更复杂(出于显而易见的原因).我简要地看着mmap-ing /dev/fd0描述这里 -原来有没有/dev/fb0在我的Ubuntu 13.04的设备.我也看过使用svgalib- 但是,他们的示例代码在我的显示器上没有显示任何内容.

所以问题是:在现代Linux中是否有简单的方法可以直接访问视频内存,而不需要太多的系统配置和样板代码?它不一定是全屏访问 - 只要通过将数据直接写入内存就可以打开X窗口并绘制像素也可以.

c graphics framebuffer

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

如何将参数传递给express.js路由器?

以下是Express.js 路由指南中的修改示例:

var express = require('express');
var router = express.Router();

router.get('/', function(req, res) {
  res.send('Birds home page');
});

router.get('/about', function(req, res) {
  res.send('About birds');
});

...
app.use('/birds', router);
app.use('/fish', router);
Run Code Online (Sandbox Code Playgroud)

这版画"关于鸟"当我访问这两个/birds/about/fish/about.

如何将参数或其他内容传递给路由器,这样,在控制器功能中,它可以分辨出这两条不同的路由?

例如,我想在参观时看到"鸟儿可以飞",参观时/birds/about"鱼可以游泳" /fish/about.

理想情况下,我希望能够传递一些"配置对象",因此迷你应用程序不需要知道它可能安装在所有可能的路径上(在伪代码中):

    router.get('/about', function(req, res) {
      res.send(magic_configuration.about_text);
    });
   ....
   magically_set_config(router, {about_text: "Bears eat fish"})
   app.use('/bears', router);
Run Code Online (Sandbox Code Playgroud)

javascript node.js express

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

SQLAlchemy的多租户

我有一个使用Pyramid/SQLAlchemy/Postgresql构建的Web应用程序,允许用户管理一些数据,并且该数据几乎完全独立于不同的用户.说,Alice访问alice.domain.com并且能够上传图片和文档,并且Bob访问bob.domain.com并且还能够上传图片和文档.Alice永远不会看到Bob创建的任何内容,反之亦然(这是一个简化的例子,真的可能在多个表中有很多数据,但想法是一样的).

现在,在DB后端组织数据最直接的选择是使用单个数据库,其中每个表(picturesdocuments)都有user_id字段,所以,基本上,要获取所有Alice的图片,我可以做类似的事情

user_id = _figure_out_user_id_from_domain_name(request)
pictures = session.query(Picture).filter(Picture.user_id==user_id).all()
Run Code Online (Sandbox Code Playgroud)

这一切都很简单,但也存在一些缺点

  • 我需要记住在进行查询时总是使用额外的过滤条件,否则Alice可能会看到Bob的图片;
  • 如果有很多用户,表可能会变得庞大
  • 在多台机器之间拆分Web应用程序可能很棘手

所以我认为以某种方式分割每个用户的数据真的很好.我可以想到两种方法:

  1. 在同一个数据库中为Alice和Bob的图片和文档设置单独的(Postgres的Schemas似乎是在这种情况下使用的正确方法):

    documents_alice
    documents_bob
    pictures_alice
    pictures_bob
    
    Run Code Online (Sandbox Code Playgroud)

    然后,使用一些黑魔法,根据当前请求的域"将"所有查询"路由"到一个或另一个表:

    _use_dark_magic_to_configure_sqlalchemy('alice.domain.com')
    pictures = session.query(Picture).all()  # selects all Alice's pictures from "pictures_alice" table
    ...
    _use_dark_magic_to_configure_sqlalchemy('bob.domain.com')
    pictures = session.query(Picture).all()  # selects all Bob's pictures from "pictures_bob" table
    
    Run Code Online (Sandbox Code Playgroud)
  2. 为每个用户使用单独的数据库:

    - database_alice
       - pictures
       - documents
    - database_bob
       - pictures
       - documents 
    
    Run Code Online (Sandbox Code Playgroud)

    这似乎是最干净的解决方案,但我不确定多个数据库连接是否需要更多的RAM和其他资源,限制了可能的"租户"数量.

所以,问题是,这一切都有意义吗?如果是,我如何配置SQLAlchemy以在每个HTTP请求上动态修改表名(对于选项1)或者维护到不同数据库的连接池并为每个请求使用正确的连接(对于选项2)?

python postgresql sqlalchemy multi-tenant

10
推荐指数
2
解决办法
4330
查看次数

"消防并忘记"来自Python脚本的过程

如何从Python脚本启动一个进程(例如另一个Python脚本),以便"子"进程与"父"完全分离,因此父进程可以a)继续其快乐方式而无需等待子进程完成和b)可以在不终止子进程的情况下终止?

家长:

import os

print "Parent started"
os.system("./child.py")
print "Parent finished"
Run Code Online (Sandbox Code Playgroud)

儿童:

import time

print "Child started"
time.sleep(10)
print "Child finished"
Run Code Online (Sandbox Code Playgroud)

运行parent.py打印:

Parent started
Child started
Child finished
Parent finished
Run Code Online (Sandbox Code Playgroud)

我想要它打印:

Parent started
Child started
Parent finished
(seconds later)
Child finished
Run Code Online (Sandbox Code Playgroud)

python subprocess

7
推荐指数
2
解决办法
4741
查看次数

如何配置Pyramid的JSON编码?

我正在尝试返回这样的函数:

@view_config(route_name='CreateNewAccount', request_method='GET', renderer='json')
def returnJSON(color, message=None):
    return  json.dumps({ "color" : "color", "message" : "message" }, default=json_util.default)
Run Code Online (Sandbox Code Playgroud)

由于Pyramid自己的JSON编码,它出现了双重编码,如下所示:

"{\"color\": \"color\", \"message\": \"message\"}"
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?我需要使用default参数(或等价物),因为它是Mongo的自定义类型所必需的.

python json pymongo pyramid

6
推荐指数
1
解决办法
3205
查看次数

分配给未映射到 SQLAlchemy 列的属性时如何引发异常?

使用 SQLAlchemy,我发现有时我会错误输入映射到列的属性名称,这会导致很难捕获错误:

class Thing(Base):
    foo = Column(String)


thing = Thing()
thing.bar = "Hello" # a typo, I actually meant thing.foo
assert thing.bar == "Hello" # works here, as thing.bar is a transient attribute created by the assignment above
session.add(thing)
session.commit() # thing.bar is not saved in the database, obviously
...
# much later
thing = session.query(Thing)...one()
assert thing.foo == "Hello" # fails
assert thing.bar == "Hello" # fails, there's no even such attribute
Run Code Online (Sandbox Code Playgroud)

有没有办法配置映射类,以便分配给未映射到 SQLAlchemy 列的任何内容会引发异常?

python sqlalchemy

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

如何使用"Nones last"对列表进行排序

我正在按键排序一个dicts列表:

groups = sorted(groups, key=lambda a: a['name'])
Run Code Online (Sandbox Code Playgroud)

一些dicts的名称设置为None,而Python 2将None值放在任何其他值之前,因此它们位于排序列表的前面.一个天真的解决方案

groups = sorted(groups, key=lambda a: a['name'] or 'zzzz')
Run Code Online (Sandbox Code Playgroud)

但是,显然,这对任何非拉丁名字都不起作用.

什么是一种很好的Pythonic方法来排序包含None值的列表,以便将这些值放在列表的末尾?

python sorting list

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

启动后如何停止uWSGI服务器?

我有一个Python金字塔应用程序,我正在使用uwsgi运行,如下所示:

 sudo /finance/finance-env/bin/uwsgi --ini-paste-logged /finance/corefinance/production.ini
Run Code Online (Sandbox Code Playgroud)

一旦它运行并且我的窗口超时,我无法在不重新启动整个盒子的情况下停止服务器.如何停止服务器?

uwsgi pyramid

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

SQLAlchemy中具有多个父项的通用关联

我试图了解SQLAlchemy随附的" 关联判别器 "示例,它定义了HasAddresses mixin,因此每个模型子类化HasAddresses都会神奇地获取一个addresses属性,该属性是可以添加Address对象的集合.链接是通过中间表执行的,因此乍一看关系看起来像多对多,我希望能够将多个地址链接到客户,还有多个客户和供应商链接到地址.

Address但是,该模型的设置方式使其具有单个parent属性,该属性只能引用单个对象.因此,在示例中,地址只能链接到单个客户或供应商.

如何修改该示例,以便Address能够反向引用多个父对象?

python sqlalchemy

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

如何从Python代码访问$ {buildout:directory}?

我有一个用zc.buildout管理的Pyramid Web应用程序.在其中,我需要读取磁盘上的文件,该文件位于buildout目录的子目录中.

问题是确定文件的路径 - 我不想硬编码绝对路径,只是提供相对路径在生产中提供应用程序时不起作用(据说是因为工作目录不同).

所以我想到的有希望的"钩子"是:

  • "root"buildout目录,我可以在buildout.cfg中解决${buildout:directory}- 但是,我无法弄清楚如何"导出"它以便Python代码可以访问它

  • Paster的.ini文件的位置启动应用程序

python paster buildout pyramid

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