小编war*_*iuc的帖子

在PyDev中启动并调试单个脚本

我是使用Eclipse和PyDev(Aptana Studio 3)的初学者.我不习惯,我不理解像Eclipse这样的大型IDE中的工作流程.

我有一个简单的任务:我有一个简单的Python脚本,我想在Eclipse中打开并运行,在Eclipse控制台中输出.或调试它.

到目前为止,我使用了另一个名为Eric4的 IDE ,它允许我按照自己的意愿行事 - 打开文件并立即运行,无需创建项目或设置启动配置.

这在Eclipse中是否可行,或者我必须为我想运行或调试的每个文件创建一个项目?我想了解它是如何工作的.

我想我明白至少需要创建一个项目来设置路径(PYTHONPATH),但是如果它是一个单独的脚本 - 默认情况下会以某种方式使用当前目录?

例如,我有一个文件夹snippets,其中我保留了很多python脚本,演示了一些功能.我如何逐个打开这些文件并运行它们?

我的大多数同事都在一个单独的控制台中启动python脚本 - python my_scipt.py.

eclipse pydev

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

如果第一个参数不是类,则 issubclass 引发异常

我正在开发一个 Python 应用程序,我需要多次检查对象是否是 DB 模型的子类。

我做了自己的功能来做到这一点:

def isModel(obj):
    return isinstance(obj, type) and issubclass(obj, Model)
Run Code Online (Sandbox Code Playgroud)

issubclass引发异常 obj is not a class,但我希望它只返回 False 如果obj不是一个类。

我认为最好制作另一个功能,而不是使用内置的issubclass

def _issubclass(obj, Klass):
    return isinstance(obj, type) and issubclass(obj, Klass)
Run Code Online (Sandbox Code Playgroud)

但是为什么内置issubclass不是这样制作的呢?什么原因?我错过了什么吗?


更新:

我有模型:

class BaseModel(object):
    id = Field(...)

class MyModel(BaseModel):
    deleted = Field(...)
Run Code Online (Sandbox Code Playgroud)

在一个函数中,我想检查一个参数是否是一个BaseModel

def update_model(model):
    assert isinstance(model, type) and issubclass(model, BaseModel), 'Must be a model'
Run Code Online (Sandbox Code Playgroud)

issubclass回答一个对象是否是给定类的子类的问题。如果对象是类实例,那么 IMO 的答案应该是“不,您的对象不是 BaseModel 子类,因为它根本不是类”。

在 Python 中是很正常的,而不是if something is not …

python

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

事务是否在SELECT上启动?

我在文档中读到:

...因为事务在游标执行查询时开始,但在Connection对象执行COMMIT或ROLLBACK时结束.

import MySQLdb

db = MySQLdb.connect(user="root", db="test")
c = db.cursor()
c.execute("SELECT * FROM books")
print c.fetchall()
Run Code Online (Sandbox Code Playgroud)

我怀疑MySQLdb甚至在不修改数据的查询(如SELECT)上启动事务,因为很难知道查询是否只读取数据而不写入数据.

  1. 这是真的吗?
  2. 如果是这样,这意味着我应该cursor.commit()在每次查询后执行,以确保没有表被锁定?
  3. 我不知道的其他问题?

谢谢

python mysql mysql-python

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

Eclipse中最近的文件数> 15?

有没有办法让最近的文件列表在Eclipse中保留15个以上的文件?

还是一个允许我查看更多内容的插件?

eclipse

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

使用 Ansible 从命令行渲染模板

我有一个 Jenkins shell 脚本,其中包含类似的内容,可以从模板创建 Nginx 配置。

nginx.conf.j2

server {
  listen 80;
  server_name {{ server_name }};
  ...
Run Code Online (Sandbox Code Playgroud)

将所有环境变量传递给模板的渲染过程:

env server_name=$SERVER_NAME \
  python - <<'EOF' > "nginx.conf"
import os, jinja2
template = jinja2.Template(open(os.environ["nginx.conf.j2"]).read())
print template.render(**os.environ)
EOF
Run Code Online (Sandbox Code Playgroud)

如何使用 Ansible 做同样的事情?我想可能是这样的:

ansible <host-pattern> -m template -a "src=nginx.conf.j2 dest=nginx.conf"
Run Code Online (Sandbox Code Playgroud)

但如何跳过<host-pattern>本地操作呢?如何将环境变量传递给模板?

python ansible

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

打包/打开发电机组

我有两台发电机.第一个生成器有时需要调用第二个生成器并从中返回它产生的值:

def a():
    for _b in b():
        yield _b

def b():
    yield 1
    yield 2

for _a in a():
    print _a
Run Code Online (Sandbox Code Playgroud)

有更优雅的方式来做到这一点:

for _b in b():
    yield _b
Run Code Online (Sandbox Code Playgroud)

我试过这个:

yield *b()
Run Code Online (Sandbox Code Playgroud)

但肯定它不起作用.我有Python 2.6.

python

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

Django是否有立即的http响应例外?

Django-Tastypie有ImmediateHttpResponse例外,允许立即回复客户端:

raise ImmediateHttpResponse(response='a message')
Run Code Online (Sandbox Code Playgroud)

Django有Http404,但我找不到更普遍的例外ImmediateHttpResponse.

您使用什么技术立即向客户返回400响应?

例如有模型:

class Subscriber(Model):

    def delete(self, *args, **kwargs):
        raise ImmediateHttpResponse('Deleting subcribers is not allowed!')
Run Code Online (Sandbox Code Playgroud)

并尝试删除对象将返回给客户端一个400给定消息的响应.

python django

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

更改nosetests的详细报告格式

nosetests在详细模式下运行我的测试:

....
test_cache_region (tests.test_sysutil.TestCachedMethodDecorator) ... ok
test_expire (tests.test_sysutil.TestCachedMethodDecorator) ... ok
test_lru (tests.test_sysutil.TestCachedMethodDecorator) ... ok
test_max_capacity (tests.test_sysutil.TestCachedMethodDecorator) ... ok
test_DecimalJSONEncoder (tests.test_util.UtilTestCase) ... ok
test_cdecimal_support (tests.test_util.UtilTestCase) ... ok
test_ceil_with_ndigits (tests.test_util.UtilTestCase) ... ok
test_switch_keyboard (tests.test_util.UtilTestCase) ... ok
...
Run Code Online (Sandbox Code Playgroud)

有没有办法轻松地将报告格式更改为:

...
tests.test_sysutil.TestCachedMethodDecorator.test_lru ... ok
tests.test_sysutil.TestCachedMethodDecorator.test_max_capacity ... ok
tests.test_util.UtilTestCase.test_DecimalJSONEncoder ... ok
tests.test_util.UtilTestCase.test_cdecimal_support ... ok
...
Run Code Online (Sandbox Code Playgroud)

python nose nosetests

4
推荐指数
2
解决办法
1170
查看次数

Python 正则表达式:如何重复一个模式?

我正在查看一长串 DNA 核苷酸,并正在寻找以起始代码“AAA”开头并以停止代码“CCC”结尾的序列。由于核苷酸是三联体,我发现的每个序列的开始和结束之间的核苷酸数量必须是三的倍数。

例如,“AAAGGGCCC”是一个有效序列,但“AAAGCCC”不是。

此外,在每个终止码之前,我想要关于特定阅读框架的最长链。

例如,如果 DNA 是“AAAGGGAAACCC”,那么“AAAGGGAAACCC”和“AAACCC”在技术上都是有效的,但由于它们共享相同的停止代码实例,我只想要最长的 DNA 链“AAAGGGAAACCC”。此外,如果我的链是“AAAAGGCCCCC”,我必须返回“AAAAGGCCC”和“AAAGGCCCC”,因为它们处于不同的阅读框架(一个阅读框架是 mod 3,另一个是 mod 1。)

虽然我认为我有代码来搜索满足 3 的倍数要求且不重叠的字符串,但我不确定如何实现保持相同阅读框架的第二个标准。我下面的代码只会返回不重叠的最长字符串,但不区分阅读帧,因此在上面的示例中,它会捕获“AAAAGGCCC”而不是“AAAGGCCCC”:

match = re.finditer(r"AAA\w{3}{%d}BBB$"% (minNucleotide-6, math.ceil((minNucleotide-6)/3))
Run Code Online (Sandbox Code Playgroud)

抱歉啰嗦了,感谢您的浏览!

python regex frame

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

python virtualenv没有使用正确版本的python

我正在创建一个需要使用python2.7.6的Django应用。我的系统已安装python3.4.1,因此我必须使用安装了python2.7的virtualenv。我使用Pycharm安装了一个virtualenv,并将其命名为django_python_2.7,但是当我在终端中将其激活并运行“ python”时,它仍然表明它正在使用系统的python3.4.1:这是我所做的:

  1. 激活环境:

    source django_python_2.7/bin/activate

  2. 运行python,它显示:

    Python 3.4.1 (v3.4.1:c0e311e010fc, May 18 2014, 00:54:21) --->这是系统级别的python,而不是virtualenv中安装的一个

但是,当我运行时which python,它显示了指向virtualenv的python版本的正确路径:

/Users/calvinmwhu/....../django_python_2.7/bin/python
Run Code Online (Sandbox Code Playgroud)

当我显式运行该virtualenv中安装的python版本时:

django_python_2.7/bin/python
Run Code Online (Sandbox Code Playgroud)

它显示正确的版本:

Python 2.7.6 (default, Sep  9 2014, 15:04:36) 
Run Code Online (Sandbox Code Playgroud)

我不知道是怎么回事。我正在Pycharm IDE中开发此应用程序,但我真的很喜欢在终端中执行命令。但是在终端中,virtualenv没有使用正确版本的python。为什么为什么在virtualenv中运行简单的“ python”命令仍然默认为系统的python?

有人可以提供一些提示吗?是否有必要更改PATH变量以使其包含virtualenv的python的路径?

python virtualenv python-2.7

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