小编Joe*_*ate的帖子

Pytest和Python 3

我在Debian Linux下安装了pytest 2.3.4.默认情况下,它在Python 2.7下运行,但有时我想在Python 3.x下运行它,它也是安装的.我似乎无法找到关于如何做到这一点的任何指示.

PyPI Trove分类器显示Python :: 3,因此可能必须是可能的.除此之外py.test somedir/sometest.py,我可以使用python -m pytest ...,甚至python2.7 -m pytest ...,但如果我尝试,python3 -m pytest ...我会得到

/usr/bin/python3: No module named pytest

pytest

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

混合Python 2.7/3.3环境中的virtualenv和subprocess.call()

对于某些功能测试,我使用Python subprocess.call(或check_call调用后者)直接从项目目录中调用几个实用程序.当全局安装库(特别是PyYAML)时,这很有效.运行virtualenv,例如在Travis-CI下,会导致问题,特别是如果virtualenv运行Python 3.x并且全局Python是2.7.

如果两个Pythons都是2.7,我仍然必须使用env参数to 在virtualenv中注入PyYAML的位置,subprocess.call以免引起ImportError.但是,当virtualenv为3.x时,这不起作用.看来调用的实用程序在virtualenv之外运行,因为它sys.path看起来如下:

 '/home/travis/build/jmafc/Pyrseas/pyrseas', '/usr/local/lib/python2.7/dist-packages/distribute-0.6.35-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/pip-1.3.1-py2.7.egg', '/home/travis/build/jmafc/Pyrseas', '/home/travis/virtualenv/python3.3/lib/python3.3/site-packages', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-linux2', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/local/lib/python2.7/dist-packages/setuptools-0.6c11-py2.7.egg-info', '/usr/lib/python2.7/dist-packages']
Run Code Online (Sandbox Code Playgroud)

注意2.7和3.3路径的混合,后者如上所述明确注入.

是否有一些方法可以从函数中virtualenv或在subprocess函数中确保子进程在virtualenv中"运行"?

python subprocess virtualenv travis-ci

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

Python中可能嵌套的函数表达式的拆分列表

PostgreSQL允许在表达式上创建索引,例如CREATE INDEX ON films ((lower(title))).它还具有pg_get_expr()信息功能,可将表达式的内部格式转换为文本,即lower(title)在前一个示例中.这些表达式有时会非常毛茸茸.以下是一些示例(在Python中):

sample_exprs = [
    'lower(c2)',
    'lower(c2), lower(c3)',
    "btrim(c3, 'x'::text), lower(c2)",
    "date_part('month'::text, dt), date_part('day'::text, dt)",
    '"substring"(c2, "position"(c2, \'_begin\'::text)), "substring"(c2, "position"(c2, \'_end\'::text))',
    "(((c2)::text || ', '::text) || c3), ((c3 || ' '::text) || (c2)::text)",
    'f1(f2(arga, f3()), arg1), f4(arg2, f5(argb, argc)), f6(arg3)']
Run Code Online (Sandbox Code Playgroud)

最后一项不是来自Postgres,而只是我的代码应该处理的一个极端例子.

我编写了一个Python函数来将文本列表拆分为组件表达式.例如,最后一项分为:

 f1(f2(arga, f3()), arg1)
 f4(arg2, f5(argb, argc))
 f6(arg3)
Run Code Online (Sandbox Code Playgroud)

我尝试用str类似的方法find()count()和也被认为是正则表达式,但最后我写了一个功能,就是我会用C写的(主要是计数打开和关闭括号寻找到打破文本).这是功能:

def split_exprs(idx_exprs):
    keyexprs = []
    nopen = nclose = beg = curr = 0
    for …
Run Code Online (Sandbox Code Playgroud)

python split list

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

Go HTML 模板:类似于 Jinja2 宏的东西?

这在一定程度上是我之前问题的后续。我现在试图解决的问题是用参数转换 Jinja2 宏,例如

{% macro example(arg1, arg2) %}
{% if arg1 %}
   do something with arg1 and arg2
{% endif %}
{% endmacro %}
Run Code Online (Sandbox Code Playgroud)

AFAICT,在 Go 中,最接近的等效项是嵌套模板,例如,

{{define "example"}}
{{if .Arg1}}
    do something with .Arg1 and .Arg2
{{end}}
{{end}}
Run Code Online (Sandbox Code Playgroud)

然而,在 Jinja 中arg1, 和arg2是我所说的真参数,即,当你调用example宏时,你将其调用为{{example(par1, par2)}},而在 Go 中,你使用{{template "example" .}}和 点,在我看来,它类似于未定义(或未明确定义)的全局变量工作区。

问题是当这些参数在调用模板中定义时,即,假设在 Jinja 中它{{example("somestring", "another")}}在一个模板中被调用,而其他两个字符串在另一个模板中被调用。我以为我可以使用变量来传递信息,例如,{{$arg1 := "somestring"}}然后调用模板,甚至在与调用相同的操作中定义变量,但 Go 不断抱怨,undefined variable "$arg1"所以这似乎是不可能的。

我知道我可以将字符串的定义“推送”到调用 Go 代码,但是除了使调用树变得复杂之外,这感觉不太对,因为毕竟模板是演示代码,而这些字符串是演示的一部分,而不是业务逻辑。它不仅仅是字符串参数,还有 (a) …

go

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

帕斯卡(免费或涡轮)阅读

我试图理解fpc -Mtp -vw在 Linux 下以 Turbo 模式(特别是)编译的 Free Pascal 中看到的某种神奇的行为。代码来自 Jack Crenshaw 的“让我们构建编译器”,第四部分,特别是带有InputOutput程序的最后一个版本,可在http://www.pp4s.co.uk/main/tu-trans-comp-jc-04找到html的。我发现“神奇”的是程序中的Read(Table[GetName]);那一行Input。根据 FP 文档,“Read从文件 F 中读取一个或多个值,并将结果存储在 V1、V2 等中;如果未指定文件 F,则读取标准输入。” 在Read是在GetChar过程中,它似乎行为很像C'S getchar(),即检索标准输入缓冲区中的下一个字符。在里面Input调用它似乎表现得像一个复杂的scanf()自动跳过空格并将多位数字转换为整数,并消除对GetNum函数的需要,如果你使用,它不会被调用,例如?i 345,但会被调用如果你尝试i=345,如果你=在解析错误的结果两边留一个空格。是否有其他一些文件证实了 Free、Turbo 甚至通用 Pascal 的明显多功能性Read

pascal freepascal turbo-pascal

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