我有一个稍微复杂的构建和测试过程,我想在Docker容器中运行。由于被测软件启动了一些xterm窗口,因此我正在容器中运行X服务器和VNC supervisord来启动它们。然后,当容器supervisord作为ENTRYPOINT 运行时,我可以使用手动启动构建和测试过程docker exec。
我无法确定使用Jenkins和Docker Pipeline插件执行此操作的方法。当前版本的插件似乎存在一些限制,我无法充分解决。这是基本思想:
node {
stage('Fetch installer') {
// SCM commands go here
}
def image = docker.image('metatest')
image.inside() {
stage('Run installer') {
sh "./installer.sh"
}
stage('Run tests') {
sh "/opt/custom/run_tests.sh"
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,此方法被打破了,因为该image.inside()方法将覆盖默认用户(将其设置为Jenkins的用户ID)和ENTRYPOINT。我需要能够使用默认的root用户启动Docker容器,因为X服务器进程必须是root用户。但是,我需要以Jenkins的非root用户身份在容器中运行安装和测试,以便Jenkins可以管理输出材料。
作为记录,image.inside()在启动Docker容器时设置了许多非常有用的参数:
docker run -t -d -u 113:123 \
-w "/var/lib/jenkins/workspace/TestProj" \
-v "/var/lib/jenkins/workspace/TestProj:/var/lib/jenkins/workspace/TestProj:rw" \
-v "/var/lib/jenkins/workspace/TestProj@tmp:/var/lib/jenkins/workspace/TestProj@tmp:rw" \
-e ******** -e ******** -e ******** -e ******** -e ******** \
-e ******** -e …Run Code Online (Sandbox Code Playgroud) 我想模拟某个相机的光学行为,只知道以下参数:
我的目标是将空间中的一组 3D 点转换为相机传感器上的 2D 点。看起来cv2.projectPoints()可以做到这一点,但它需要一组失真系数,K 1,K 2,P 1,P 2等。
大多数人通过使用真实相机进行校准来获得这些系数。我想使用名义相机。一个这样的例子是 GoPro,一个人发现了这些值:
[[-2.57614020e-01, 8.77086999e-02, -2.56970803e-04, -5.93390389e-04, -1.52194091e-02]]
Run Code Online (Sandbox Code Playgroud)
我无法通过我列出的输入变量找到对这些参数的解释,而且我对光学的了解不够,无法知道如何生成它们。
如何生成projectPoints()用于名义鱼眼镜头所需的失真系数?
我有以下类示例,从较大的项目中简化.它基于一个日志框架,它使用记录器的作用域来终止析构函数中的日志条目.
下面的代码将无法编译,因为构造函数是一个隐式删除的函数(编辑:不是真),这似乎与std::ostringstream对象有关.我对此感到困惑,因为我认为我应该能够直接构造一个std::ostringstream,这意味着我应该能够直接构造一个Container对象.
#include <iostream>
#include <sstream>
class Container {
public:
std::ostringstream bufferStream;
public:
Container(); // constructor
~Container();
};
Container::Container() {
bufferStream << "Hello ";
}
Container::~Container() {
std::cout << bufferStream.str() << " [end]" << std::endl;
}
// === Main method ===
int main() {
Container().bufferStream << "world"; // works fine
{ // causes tons of compiler errors
Container cont = Container();
cont.bufferStream << "world!";
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
请注意,标记为"正常工作"的行就是这样做的.它似乎实例化了一个匿名Container对象,它包含一个新的std::ostringstream …
我有一个 CMake 项目,如下所示:
project/
CMakeLists.txt
subprojectA/
CMakeLists.txt
include/
headerA.hpp
src/
libraryA.cpp
subprojectB/
CMakeLists.txt
src/
mainB.cpp
Run Code Online (Sandbox Code Playgroud)
“库”子项目 A 被编译为静态库,成为 libsubprojectA.a。“主”项目 B 被编译为二进制文件并依赖于库。mainB.cpp 包含对 headerA.hpp 的引用。
这是 subprojectA/CMakeLists.txt:
project(SubProjectA)
include_directories(include)
add_library(subprojectA STATIC src/libraryA.cpp)
set(${PROJECT_NAME}_INCLUDE_DIRS
${PROJECT_SOURCE_DIR}/include
CACHE INTERNAL "${PROJECT_NAME}: Include Directories" FORCE)
Run Code Online (Sandbox Code Playgroud)
这是 subprojectB/CMakeLists.txt:
project(SubProjectB)
include_directories(${SubProjectA_INCLUDE_DIRS})
add_executable(mainBinary src/mainB.cpp)
target_link_libraries(mainBinary subprojectA)
Run Code Online (Sandbox Code Playgroud)
主项目 CMakeLists.txt 如下所示:
project(Project)
add_subdirectory(subprojectB)
add_subdirectory(subprojectA)
Run Code Online (Sandbox Code Playgroud)
请注意,主项目 subprojectB 列在 subprojectA之前。
问题就在这里。当我第一次在此项目上运行“cmake”时,${SubProjectA_INCLUDE_DIRS}未在 SubProjectB 中设置。
我认为正在发生的事情是 SubProjectB 的 CMakeLists 在${SubProjectA_INCLUDE_DIRS}尚未设置时首先加载。结果,它将自己的包含路径设置为空字符串。然而,即使libsubprojectA.a之前构建成功mainBinary,包含路径也已预先设置为空。结果,我在尝试执行以下操作时收到此错误mainBinary:
subprojectB/src/mainB.cpp:1:23: fatal error: …Run Code Online (Sandbox Code Playgroud) 将在spaCy基于规则的模式匹配与匹配跨度的起始和结束字符一起返回匹配ID,但我没有看到任何东西,上面写着如何确定哪些跨度的部分由那名令牌的文档中匹配。
在正则表达式中,我可以在组周围放置括号来选择它们并让它们“选择”并脱离模式。spaCy 可以做到这一点吗?
例如,我有这样的文字(来自德古拉):
他们穿着高筒靴,裤子塞在里面,留着长长的黑发和浓密的黑胡须。
我定义了一个实验:
import spacy
from spacy.matcher import Matcher
def test_match(text, patterns):
nlp = spacy.load('en_core_web_sm')
matcher = Matcher(nlp.vocab)
matcher.add('Boots', None, patterns)
doc = nlp(text)
matches = matcher(doc)
for match in matches:
match_id, start, end = match
string_id = nlp.vocab.strings[match_id]
span = doc[start:end]
print(match, span.text)
text_a = "They wore high boots, with their trousers tucked into them, " \
"and had long black hair and heavy black moustaches."
patterns = [
{'POS': 'PRON'},
{'TAG': 'VBD'},
{'POS': …Run Code Online (Sandbox Code Playgroud)