小编Nik*_*nko的帖子

在Perl中我应该使用什么而不是printf?

我需要在Perl中使用一些字符串替换来简化翻译,即替换很多

print "Outputting " . $n . " numbers";
Run Code Online (Sandbox Code Playgroud)

通过类似的东西

printf ("Outputting %d numbers", $n);
Run Code Online (Sandbox Code Playgroud)

但是,我想用更容易为人类解析的东西替换printf,如下所示:

printX ("Outputting {num} numbers", { num => $n });
Run Code Online (Sandbox Code Playgroud)

或者通常是更多Perly.

你能推荐一些你喜欢和使用的东西(无论是否来自CPAN)?

perl printf string-formatting

7
推荐指数
4
解决办法
1108
查看次数

将旧版Perl代码移至UTF-8时,我应该注意哪些问题?

到目前为止,我工作的项目只在源代码中使用ASCII.由于I18N领域即将发生的一些变化,以及我们在测试中需要一些Unicode字符串,我们正在考虑咬住子弹并将源代码移动到UTF-8,同时使用utf8pragma(use utf8;)

由于代码现在是ASCII,我不希望代码本身有任何问题.但是,我不太清楚我们可能会遇到任何副作用,而我认为考虑到我们的环境(perl5.8.8,Apache2,mod_perl,带FreeTDS驱动程序的MSSQL服务器),我很可能会得到一些副作用.

如果你过去做过这样的迁移:我可以期待什么问题?我该如何管理它们?

migration legacy unicode perl utf-8

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

如何在Perl中捕获输出和退出代码时执行外部脚本?

我正在尝试从Perl脚本检查SVN标记是否存在.所以我尝试调用svn info $url,读取退出代码并禁止标准输出和标准错误流.但是,我很难优雅地做到这一点(可能有更好的方式向SVN询问标签,但这不是重点:)

my $output = `svn info $url/tags/$tag`;
Run Code Online (Sandbox Code Playgroud)

这会在输入时抑制输出$output.退出代码丢失.

my $output = `svn info $url/tags/$tag 2>&1`;
Run Code Online (Sandbox Code Playgroud)

这会抑制STDERR和STDOUT并将它们都放入$output.退出代码再次丢失.

my $exitcode = system("svn", "info", "$url/tags/$tag");
Run Code Online (Sandbox Code Playgroud)

这会捕获退出代码,但实际的输出和错误流对用户可见.

open( STDERR, q{>}, "/dev/null" );
open my $fh, q{>}, "/dev/null";
select($fh);
if (system("svn", "info", "$url/tags/$tag") != 0) {
   select(STDOUT);
   print ("Tag doesn't exist!");
   do_something_with_exit();
}
select(STDOUT);
print "Exit code: $exitcode";
Run Code Online (Sandbox Code Playgroud)

这会杀死STDOUT和STDERR并捕获退出代码,但它很难看,因为我必须记住将STDOUT切换回原始状态.

那么,还有更优雅的解决方案吗?

perl stdout exit-code stderr

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

Gitlab的"项目工作区"如何在工作之间定义和传播?

Gitlab的文档经常提到"项目工作区"而没有实际定义其构造和功能.一个例子来自关于Git策略章节,它简单地告诉用户"使用git fetch,它在重新使用项目工作区时更快(如果不存在则回退到克隆状态)." 并没有以任何方式定义重用方式.

我想了解它是如何创建的,它是如何在作业之间传递的,以及它如何影响在Docker执行器中运行的作业.除了源代码之外,是否有关于此的某些信息?我错过了文档的一些关键部分吗?

gitlab gitlab-ci gitlab-ci-runner

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

在发行包中使用virtualenv部署Django?

我必须将一个Django应用程序部署到SuSE Linux Enterprise 11系统上.公司规则说我只需要使用RPM进行部署.虽然我可以使用./setup.py bdist_rpm每个依赖项,但它并不是真正理智,因为RPM还没有记录所有依赖项.因此,我没有使用RPM的真正优势,手动管理依赖项有点麻烦,我想避免它.

现在我有了以下想法:在构建软件包时,我可以创建一个virtualenv,通过pip那里安装所有依赖项,然后将其余的代码打包到一个固态RPM中.

这种方法有多明智?

deployment django pip rpm virtualenv

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

如何在Django的基于类的视图中覆盖`as_view`?

我正在尝试在我的项目中引入基于类的视图.到目前为止看起来很好,直到我发现以下问题.

我正在使用django-navigation创建面包屑.它的工作原理如下:一个视图函数被装饰,这个装饰器引入了一个关于该函数的属性breadcrumb.在模板中,将解析当前URL或其部分,并检查生成的视图以查找此属性.如果它在那里,它被评估,结果是面包屑文本.

由于基于类的意见通常由代表as_view()法,看来我需要来装饰它,但是,因为它是一个类的方法,我真的不能访问实例有,这我当然面包屑依靠.

breadcrumb属性as_view()中附加属性__init__()也没有用,或者我的语法错误.编辑:当然它不起作用,因为我附加它as_view,而不是它的返回值.

任何想法如何正确整合面包屑装饰器和基于类的视图?

django overriding decorator django-class-based-views

6
推荐指数
2
解决办法
3185
查看次数

如何避免在Python的模块系统中命名冲突?

在我的Django项目中,我有一个名为app的应用程序profile,它主要包含我的profile.models.UserProfile类以获取有关User对象的其他信息(对Django人来说可能很熟悉).现在我已经将一些初始化代码放入profile/__init__.py(某些信号)并遇到了一个问题:Django告诉我hotshot_profile没有找到一个名为的表.

经过几个小时的搜索,我将问题追溯到导入订单.跑步python -v manage.py test我发现了以下内容:

import nose.plugins.prof # precompiled from /home/rassie/.virtualenvs/myproject/lib/python2.6/site-packages/nose/plugins/prof.pyc
import hotshot # directory /usr/lib64/python2.6/hotshot
import hotshot # precompiled from /usr/lib64/python2.6/hotshot/__init__.pyc
dlopen("/home/rassie/.virtualenvs/myproject/lib64/python2.6/lib-dynload/_hotshot.so", 2);
import _hotshot # dynamically loaded from /home/rassie/.virtualenvs/myproject/lib64/python2.6/lib-dynload/_hotshot.so
import hotshot.stats # from /usr/lib64/python2.6/hotshot/stats.py
import profile # directory /home/rassie/MyProject/apps/profile
import profile # precompiled from /home/rassie/MyProject/apps/profile/__init__.pyc
Run Code Online (Sandbox Code Playgroud)

所以我的Nose跑步者输入nose.plugins.prof(即使这个插件已关闭),导入hotshot,尝试导入profile.但是,profile我的项目中导入,而它应该已经从系统Python导入.

显然,我自己的profile模块与系统profile模块冲突.我显然不能从我自己的编程中排除与Python捆绑在一起的每个模块名称.所以问题是,我从哪里开始?我是否必须myproject为我的所有应用创建命名空间?Django会与之合作吗?

PS:Table的名称hotshot_profile似乎来自于另一个尚未完全分析的命名冲突,其中包含一个 …

python django python-module python-import

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

在不杀死 Unicode 的情况下,在 Python 2 中编码转义字符的正确方法是什么?

我想我对 Python 的 unicode 字符串很着迷。我试图在 Unicode 字符串中编码转义字符而不转义实际的 Unicode 字符。我得到这个:

In [14]: a = u"Example\n"

In [15]: b = u"??????\n"

In [16]: print a
Example


In [17]: print b
??????


In [18]: print a.encode('unicode_escape')
Example\n

In [19]: print b.encode('unicode_escape')
\u041f\u0440\u0438\u043c\u0435\u0440\n
Run Code Online (Sandbox Code Playgroud)

虽然我非常需要(显然,英语示例可以按我的意愿工作):

In [18]: print a.encode('unicode_escape')
Example\n

In [19]: print b.encode('unicode_escape')
??????\n
Run Code Online (Sandbox Code Playgroud)

除了转向 Python 3,我该怎么办?

PS:正如下面所指出的,我实际上是在寻求逃避控制字符。我是否需要的不仅仅是那些将不得不被看到。

python unicode encoding

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

.gitlab-ci.yml 是否可用于 Gitlab CI 中 GIT_STRATEGY=none 的作业?

Gitlab 文档说明了以下内容GIT_STRATEGY: none

none还重新使用项目工作区,但跳过所有 Git 操作(包括 GitLab Runner 的预克隆脚本,如果存在)。它对于专门对工件进行操作(例如部署)的作业最有用。Git 存储库数据可能存在,但肯定会过时,因此您应该只依赖从缓存或工件带入项目工作区的文件。

我仍然有点困惑这应该如何运作。如果不能保证源代码存在,则项目工作区中可能没有源代码,因此文件.gitlab-ci.yml也会丢失。如果没有构建脚本,作业必定会失败。如果根据外部因素,源仅部分丢失,则作业将随机失败,这比每次都失败更糟糕。但是,如果每次都失败,那么该功能还有什么意义呢?

我看到的另一种可能性是.gitlab-ci.yml可能在运行时注入,因此即使没有存储库的新副本,也会有一个构建脚本。如果是这样,我可以从存储库中定义更多文件以注入构建过程吗?这些特定工​​作有哪些限制?

gitlab-ci gitlab-ci-runner

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

为什么我无法跨站点和跨框架获取对象 URL(又名“blob URL”)?

我正在开发一个 iframeable 组件,现在偶然发现了一些看起来像是安全问题的问题。

我有两个网站:

  • 站点 A,运行在 http://localhost:3002
  • 站点 B,运行在 http://localhost:3000

站点 A 将站点 B 嵌入到 IFrame 中。站点 B 需要使用数据,而这些数据应该由站点 A 提供。但是,目前站点 B 只通过 URL 接受数据,并且由于原始 URL 可能需要身份验证,因此数据由站点 A 获取,并转换为对象 URL (与URL.createObjectURL)然后通过 提供给站点postMessageB。站点 B 现在应该从该 URL 获取数据并使用它。

然而,站点 B 获取对象 URL 被浏览器阻止:

  • 铬合金:Not allowed to load local resource: blob:http://localhost:3002/<UUID>
  • 火狐浏览器:Security Error: Content at http://localhost:3000/... may not load data from blob:http://localhost:3002/<UUID>

据我所知,这些消息与 CSP 或 CORS 没有关联。但是,我无法理解问题是什么以及它是否可以修复 - 我一直认为对象 URL 目前不存在任何跨站点问题,这正是使用它们的原因。

那么为什么会发生这种情况以及我能做什么呢?

iframe cross-site same-origin-policy createobjecturl

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