我执行以下代码片段:
NSCalendar *gregorian = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *comp = [gregorian components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:[NSDate date]];
[comp setDay:1];
NSDate *firstDayOfMonthDate = [gregorian dateFromComponents:comp];
Run Code Online (Sandbox Code Playgroud)
firstDayOfMonthDate的值是= 30-4-2011但是删除是1-5-2011,即我想要任何指定日期的第一个月份日期.但它给了我上个月的最后日期.
提前致谢.
我需要创建两个不同的框架,一个写之间的网络通信C++和其他在Python.
为了交换数据,我想创建一些灵活的结构(基本上是一个struct)C++,它被序列化,通过套接字发送到Python然后反序列化.
最常见的方法是什么?我确信Boost可以在任何一方做到这一点,因为有boost python,但我不想那么夸大项目要求.那么除了指定自己的二进制数据格式之外,是否可能有更小的库或其他优雅的解决方案?
更新:
所以这里有一个例子,说明如何使用Googles protobuf将C++脚本中的数据结构发送到Python脚本UDP.这是在Mac OS X Mavericks上测试的,但在其他Unix系统上也可以正常工作.
安装protobuf
第一步当然是安装protobuf库.我使用自制软件作为主库并pip安装Python模块:
brew install protobuf
pip install protobuf
Run Code Online (Sandbox Code Playgroud)
然后我使用proto语法定义了一个非常简单的数据结构:
文件名:foo.proto
package prototest;
message Foo {
required int32 id = 1;
required string bar = 2;
optional string baz = 3;
}
Run Code Online (Sandbox Code Playgroud)
现在可以通过以下方式将此原始文件转换为C++和Python类:
protoc foo.proto --cpp_out=. --python_out=.
Run Code Online (Sandbox Code Playgroud)
该文件夹现在应该包含C++头文件和源文件以及Python代码:
??? foo.pb.cc
??? foo.pb.h
??? foo.proto …Run Code Online (Sandbox Code Playgroud) 我读了很多关于这个问题的但是找不到任何解决方案,所以我会问另一个关于它的问题,因为我甚至不确定我是否使用了正确的Python包文件夹结构.
所以基本上我正在开发一个使用Tornado Web服务器框架的应用程序,我想打包它,因此用户可以通过它安装它pip并访问基本脚本来启动Web服务器.
目录结构如下:
??? MANIFEST.in
??? README.md
??? config
? ??? default.cfg
??? docs
? ??? Makefile
? ??? _build
? ??? _static
? ??? _templates
? ??? conf.py
? ??? index.rst
??? foopackage
? ??? __init__.py
? ??? barmodule.py
? ??? bazmodule.py
??? setup.py
??? static
? ??? css
? ? ??? menu.css
? ? ??? main.css
? ??? img
? ? ??? logo.png
? ??? js
? ? ??? ui.js
? ? ??? navigation.js
? …Run Code Online (Sandbox Code Playgroud) 当我使用该函数时,我在python脚本中遇到了一个非常奇怪的问题all().
控制台给了我false(这显然是正确的)这一行:
all(x == 2 for x in (8,2,2,2))
Run Code Online (Sandbox Code Playgroud)
在我的脚本中同一行返回true?!
这里发生了什么?是否有其他all()功能可以在我的脚本中覆盖它?我正在导入以下模块:
import os
import sys
import string
import time
from time import gmtime, strftime
from optparse import OptionParser, OptionGroup
import cx_Oracle
from pylab import *
import ROOT
from array import array
import logging
from traceback import format_exc
Run Code Online (Sandbox Code Playgroud) 我想构造一个具有特殊行为的对象,我很确定它可以用python完成(使用生成器,或者某种棘手的类定义).
我基本上想要一个对象让我们调用它 - colourgun每次访问它时都会从预定义颜色列表中返回颜色.所以它应该像一个简单的变量,但每次访问它时都要改变它的行为.
您可以在以下示例中看到类似的概念:
class CounterList(list):
def __init__(self, *args):
super(CounterList, self).__init__(*args)
self.counter = 0
def __getitem__(self, index):
self.counter += 1
return super(CounterList, self).__getitem__(index)
Run Code Online (Sandbox Code Playgroud)
每次访问列表时都会CounterList增加一个实例counter,因为它__getitem__被调用.
我colourgun应该能够检测到它何时被"使用"并且表现得像这样:
>>> gun = Colourgun() # or a function, a generator, whatever...
>>> print gun
'predefined_colour1'
>>> print gun
'predefined_colour2'
>>> print gun
'predefined_colour3'
>>> print gun # no more colours left: reloading and maybe warn the user
[WARNING] automatically reloading the gun
'predefined_colour1'
>>> gun.load(['colour1', …Run Code Online (Sandbox Code Playgroud) 因此,我花了一整天的时间来弄清楚如何用多个Docker映像配置一个简单的Jenkins Pipeline,我一点都不高兴。
我需要在几个不同的Docker容器上执行(准备,构建,测试,文档)几个阶段(当前,我只选择了三个标准的Python容器)。如果这些程序可以并行运行会很好,但是我只找到了这个解决方案,它将所有阶段组合到一个阶段(因此在Blue Ocean UI中创建了一个不太有用的概述):跨多个Docker映像的Jenkins管道
因此,我结束了下面的配置,这很丑陋(到处都是代码重复),但是或多或少在经典UI中创建了一个漂亮的概览:
蓝海用户界面中的信息不多
来自的可接受的测试概述junit,它结合了每个阶段的所有测试,但是如果任何测试失败,则会显示相应的“版本”:
但是,最令人讨厌的是,您看不到哪个步骤失败了。如果Python 2.7失败,其他所有内容也都标记为失败,甚至看不到哪个阶段失败。
我尝试了许多不同的方法,但我想知道应该怎么做。这对詹金斯来说应该是一件很平常的事,所以我想我在这个(对我来说绝对是全新的)管道/节点/标签/阶段/步骤/声明式/脚本化/ groovy / blueocean方面有一些普遍的误解...
应该可以为每个Docker容器定义一些列表(可能是可定制的阶段/步骤),并并行运行它们,并使其在Blue Ocean和Classic UI中很好地显示,不是吗?
node {
stage("Python 2.7.14") {
checkout scm
docker.image('python:2.7.14').inside { // just a dummy for now
stage("Prepare") { sh 'python --version' }
stage("Build") { sh 'ls -al' }
}
}
stage("Python 3.5.4") {
checkout scm
docker.image('python:3.5.4').inside {
stage("Prepare") { sh 'python -m venv venv' }
stage("Build") {
sh """
. venv/bin/activate
make install-dev
"""
}
stage('Test') {
sh """
. venv/bin/activate …Run Code Online (Sandbox Code Playgroud) 这让我抓狂:我尝试使用脚本化 Jenkins Pipeline 从存储库的特定文件夹中的 Dockerfile 构建 Docker 映像,但它没有获得正确的路径。
这是以下行Jenkinsfile:
def customImage = docker.build("km3pipe:${env.BUILD_ID}",
"-f ${dockerfile} ${DOCKER_FILES_DIR}")
Run Code Online (Sandbox Code Playgroud)
正如您在下面的 Jenkinslog 中看到的,变量已正确解析(我还仔细检查了工作区,一切都很好),但它似乎忽略了第二个参数.dockerfiles:
[py365] + docker build -t km3pipe:13 -f py365 ./dockerfiles
[py365] unable to prepare context: unable to evaluate symlinks in Dockerfile path:
lstat /var/lib/jenkins/workspace/f-docker-image-names-for-ci-2DCL5RJ7AMH7K
IB6OCBTD57EC5DUGYZTQE5EQ6KGOSPXMUOVJP6Q/py365: no such file or directory
Run Code Online (Sandbox Code Playgroud)
根据文档(https://jenkins.io/doc/book/pipeline/docker/),这应该有效:
可以通过将其他参数添加到方法的第二个参数来将其他参数传递给 docker build
build()。以这种方式传递参数时,该字符串中的最后一个值必须是 docker 文件的路径。
Dockerfile此示例通过传递 -f 标志来覆盖默认值:Run Code Online (Sandbox Code Playgroud)node { checkout scm def dockerfile = 'Dockerfile.test' def customImage = docker.build("my-image:${env.BUILD_ID}", "-f ${dockerfile} …
可能已经太晚了,但在解决之前我无法入睡:
我有一棵树,有一些父母,他们有孩子,他们也有孩子等等。
现在我需要一个函数来获取树中的所有节点。
这是目前有效的方法,但只有一层深度:
def nodes_from_tree(tree, parent):
r = []
if len(tree.get_children(parent)) == 0:
return parent
for child in tree.get_children(parent):
r.append(nodes_from_tree(tree, child))
return r
Run Code Online (Sandbox Code Playgroud)
然后我尝试通过r,所以它记住了孩子们,但我多次使用该函数并r累积存储所有节点,尽管我将其设置为r=[]:
def nodes_from_tree(tree, parent, r=[]):
r = []
if len(tree.get_children(parent)) == 0:
return parent
for child in tree.get_children(parent):
r.append(nodes_from_tree(tree, child, r))
return r
Run Code Online (Sandbox Code Playgroud)
编辑:这是树结构:
parent1 parent2 parent3
| | |
| | |
child | |
| |
+--------------+ |
| | | |
child child child |
| …Run Code Online (Sandbox Code Playgroud) 我确信这个很容易numpy,但我找不到合适的方法.基本上我需要像outer()减法一样的东西.这是我通过LC的工作代码:
import numpy as np
a = np.array(((1,2,3), (2,3,4), (3,4,5)))
b = np.array(((6,7,8), (6,3,1)))
print np.array([i-j for i in a for j in b])
Run Code Online (Sandbox Code Playgroud)
输出:
[[-5 -5 -5]
[-5 -1 2]
[-4 -4 -4]
[-4 0 3]
[-3 -3 -3]
[-3 1 4]]
Run Code Online (Sandbox Code Playgroud)
这是发布的答案的速度比较.a有1000000个条目,b有100个:
In [22]: %timeit np.array([i-j for i in a for j in b])
1 loops, best of 3: 12.3 s per loop
In [23]: %timeit np.repeat(a,b.shape[0],0)-np.tile(b,(a.shape[0],1))
10 loops, best …Run Code Online (Sandbox Code Playgroud) python ×6
docker ×2
jenkins ×2
arrays ×1
c++ ×1
dockerfile ×1
groovy ×1
iminuit ×1
iphone ×1
minimization ×1
nscalendar ×1
nsdate ×1
numpy ×1
objective-c ×1
package ×1
pip ×1
properties ×1
pyminuit ×1
recursion ×1
tree ×1