问题:有没有办法在python中使用字符串创建一个函数对象?
信息:我正在开发一个项目,我将数据存储在sqlite3服务器后端.没什么可疯狂的.DAL类通常是通过代码生成完成的,因为代码是如此令人难以置信的平凡.但这给了我一个想法.在python中,当找不到属性时,如果定义函数" getattr ",它将在错误之前调用它.所以我想通过解析器和逻辑树的方式,我可以在第一次调用时动态生成我需要的代码,然后将函数对象保存为本地属性.例如:
DAL.getAll()
#getAll() not found, call __getattr__
DAL.__getattr__(self,attrib)#in this case attrib = getAll
##parser logic magic takes place here and i end up with a string for a new function
##convert string to function
DAL.getAll = newFunc
return newFunc
Run Code Online (Sandbox Code Playgroud)
我已经尝试过编译功能,但exec和eval在能够完成这种壮举方面远非令人满意.我需要能够实现多种功能的东西.还有另一种方法可以做到这一点,除了那些不涉及将其写入磁盘?我再次尝试动态创建一个函数对象.
PS:是的,我知道这有可怕的安全和稳定性问题.是的,我知道这是一种非常有效的方法.我关心的?没有.这是一个概念证明."可以python这样做吗?它能动态创建一个函数对象 "是我想知道的,而不是一些优越的选择.(尽管在你回答了手头的问题之后可以自由地选择优秀的替代方案)
问题:有没有办法让程序在没有创建Windows服务的长期痛苦任务的情况下运行,或者是否有简单的方法来创建简单的服务?
信息:我正在为大学开展一个小项目,这是一个简单的分布式处理程序.我将利用目前完全闲置的校园电脑,制作我自己的小型超级计算机.但要做到这一点,我需要在我的目标机器上运行客户端.
通过互联网上的一点点,我发现我需要的是一项服务,我也发现这并不像制作计划任务或将.bat文件放入启动文件夹那么简单.
我不需要太多.如果我可以让它调用"python cClient.py"我完全设置.是否有捷径可寻?喜欢在注册表中添加一些键在哪里?或者我是否必须完成微软为建立服务所做的整个歌舞仪式?
问题:您在ubuntu上的"运行应用程序"框中输入什么命令来打开终端?
信息:我在上网本上遇到了可怕的驱动程序问题.我可能能够解决其中的一些问题,如果我可以到达终端,但我只有我的键盘,没有鼠标,所以我需要知道输入应用程序的输入命令(我可以使用alt -f2)打开终端.
问题:为什么这个sqlite3语句没有更新记录?
信息:
cur.execute('UPDATE workunits SET Completed=1 AND Returns=(?) WHERE PID=(?) AND Args=(?)',(pickle.dumps(Ret),PID,Args))
Run Code Online (Sandbox Code Playgroud)
我正在使用python和sqlite3.这个语句不会抛出错误,它似乎就是被忽略了.由于测试原因我在下面包括:
cur.execute('SELECT * FROM workunits WHERE PID=(?) AND Args=(?)',(PID,Args))
Run Code Online (Sandbox Code Playgroud)
哪个记录就好了.但记录没有与腌制ret的新值一起更新.它仍然是你.我无法弄清楚为什么.我的where声明似乎有效.我的语法似乎是正确的,因为没有抛出错误.我对于为什么它不起作用我一无所知.
我已经谷歌了一点,我无法弄清楚出了什么问题.我的着色器:
#version 120
attribute vec2 coord2d;
void main(void)
{
gl_Position = vec4(coord2d, 0.0, 1.0);
}
Run Code Online (Sandbox Code Playgroud)
我知道这个着色器有效,但当我尝试链接程序时,我得到:
glLinkProgram:Vertex info
-----------
0(3) : error C1013: function "main" is already defined at 0(4)
Run Code Online (Sandbox Code Playgroud)
我已经检查过以确保viles正确地进入内存而不是内存.他们编译得很好.出现问题是连接步骤.我对于什么感到无能为力,而且我已经在这方面打了很长时间.有小费吗?
编辑:
这是我用来创建着色器的代码.它一直到条件,它实际上完全完成执行,但日志打印出你在上面看到的.
GLuint updateProg()
{
prog = glCreateProgram();
if (vs == 0 || fs == 0) return 0;
glAttachShader(prog, vs);
glAttachShader(prog, fs);
int link_ok;
glLinkProgram(prog);
glGetProgramiv(prog, GL_LINK_STATUS, &link_ok);
if (!link_ok)
{
fprintf(stderr, "glLinkProgram:");
print_log(prog);
return 0;
}
return prog;
}
Run Code Online (Sandbox Code Playgroud) 问题:如何使用GLSL在openGL中渲染点?
信息:前段时间我在python中进行了重力模拟,并使用了blender进行渲染.它看起来像这样.作为练习,我将其移植到openGL和openCL.我想,我实际上已经在openCL中工作了.直到我花了相当多的时间在openCL工作,才意识到很难知道这是否正确而无法看到结果.所以我开始玩openGL.我在wikibooks上关注了openGL GLSL教程,内容非常丰富,但它没有涵盖点或粒子.
我不知道从哪里开始.我找到的大多数教程都是针对openGL默认程序的.我想用GLSL来做.我仍然对这一切都很陌生,所以请原谅我的潜在愚蠢,如果答案就在我的鼻子底下.我正在寻找的是如何在相互融合的点周围制作光晕.我对如何在片段着色器中执行此操作有一个大致的想法,但据我所知,我只能抓取由我的点创建的多边形所包围的像素.我确信有一种方法可以解决这个问题,但如果不这样做会很疯狂,但我的新生儿中的我是无能为力的.有人可以给我一些方向吗?谢谢.
我正在阅读本教程中的内容,最后我将了解如何使用Vertex Buffers,我看到我生成的顶点缓冲区并且一次调用了glBindBuffer,我必须第二次绑定:
glBindBuffer(GL_ARRAY_BUFFER, vbo_triangle);
Run Code Online (Sandbox Code Playgroud)
我仍然是openGL的新手(比如3天)所以我试图围绕着很多这些东西是如何工作的.我花了大部分时间在khronos或opengl.org上阅读有关命令的内容,但我无法弄清楚为什么这个命令会被调用两次.任何提示?谢谢.
问题:为什么不能找到-lGL?
信息:我今天早上在我的上网本上按照本网站的指导编写了一个程序,编译运行没有问题.然后我继续使用完全相同的代码并尝试在我的桌面上运行它.我的上网本编译的版本工作,但它对我大吼大叫,因为我的上网本没有显卡,而我的桌面也是如此,所以编辑得不是很好.还是跑了.
但是当我试图在我的桌面上编译它时失败了.起初它说"致命错误:GL/gl.h:没有这样的文件或目录"所以我想"等等,我认为opengl带有ubuntu,我的意思是我的上网本工作,也许我安装了一些东西而忘了它"所以我跑过apt并拉下了我认为可能有帮助的所有opengl.但是盯着212 - 1278个包(取决于我搜索的单词)可能会或可能不会与opengl相关,我不知道还有什么可以尝试.我遇到了第一个问题,但现在它抱怨它找不到-lGL,这看起来很奇怪.
任何提示,技巧,评论,讽刺?我的最终目标是能够从命令行编译c代码,我一直在使用我从上述网站获得的命令:
gcc -o gltest gltest.c -lX11 -lGL -lGLU
Run Code Online (Sandbox Code Playgroud)
我运行Ubuntu 11.04桌面,64位.Nvidia GTX465.