小编Gil*_*pie的帖子

重载的Bool/String歧义

为什么C++会将字符串文字转换为bool而不是字符串?

#include <iostream>

using namespace std;

class A
{
    public:
        A(string v)
        {
            cout << v;
        }

        A(bool v)
        {
            cout << v;
        }
};

int main()
{
    A("hello");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出: 1

是因为编译器不够聪明,无法从char*跳转到字符串,而只是假设bool是最接近指针的东西?我唯一的选择是创建一个显式的char*构造函数,它基本上与字符串构造函数完全相同吗?

c++ string casting boolean overloading

10
推荐指数
2
解决办法
2932
查看次数

检查 gdb 中的静态 const 类成员

如何static const在 gdb 中打印类成员的值?

说我有:

#include <iostream>

struct foo {
    static const int bar = 5;
};

int main() { 
    std::cout << foo::bar;
    return 0; 
}
Run Code Online (Sandbox Code Playgroud)

如何检查foo::bargdb 中的内容?

我试过:

(gdb) p foo::bar
No symbol "foo" in current context.
(gdb) p 'foo::bar'
No symbol "foo::bar" in current context.
Run Code Online (Sandbox Code Playgroud)

c++ gdb

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

严格比较

在JavaScript中,有严格的比较操作符op1 === op2op1 !== op2将比较这两个类型和值.有没有一种pythonic方式来实现同样的事情?

到目前为止,我只能提出以下凌乱的条件:

isinstance(op1, type(op2)) and isinstance(op2, type(op1)) and op1 == op2
Run Code Online (Sandbox Code Playgroud)

not isinstance(op1, type(op2)) or not isinstance(op2, type(op1)) or op1 != op2
Run Code Online (Sandbox Code Playgroud)

python python-3.x

9
推荐指数
3
解决办法
1万
查看次数

从popen获得PID

我有一个程序,用于popen()打开和读取shell命令的输出.问题是,据我所知,没有简单的方法来获取正在运行的进程的PID,因此,如果它被卡住,你就无法杀死它.所以问题是,如何从打开的进程中检索PID popen

c c++ pid popen

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

Jenkins + Git:仅当 PR 在子目录中引入更改时才构建

我们有一个大型的 monorepo,里面有多个项目(A 和 B)。我目前将 Jenkins 设置为一个 Multibranch Pipelines 项目,该项目监视 PR 的 monorepo。如果创建了 PR,Jenkins 会同时构建 A 和 B。

现在,我希望 Jenkins 更聪明,并且只在 PR 中的任何更改引入A/目录更改时才构建项目 A。事实证明这是非常困难的。

when { changeset "A/" }似乎只检查最后提交的修改的文件A/,而不是如果PR在修改的文件A/

所以我使用https://issues.jenkins-ci.org/browse/JENKINS-54285让它变得更聪明,并做了:

when { expression { return sourceChanged("A/") } }

sourceChanged定义为:

def boolean sourceChanged(String module) {
    if (env.CHANGE_TARGET == null)
        return true;

    def MASTER = sh(returnStdout: true, script: "git rev-parse origin/${env.CHANGE_TARGET}").trim()
    def HEAD = sh(returnStdout: true, script: "git …
Run Code Online (Sandbox Code Playgroud)

git jenkins jenkins-pipeline multibranch-pipeline

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

删除不在引号内的哈希注释

我正在使用python来浏览文件并删除任何评论.注释被定义为哈希及其右侧的任何内容,只要哈希不在双引号内.我目前有一个解决方案,但它似乎是次优的:

filelines = []
    r = re.compile('(".*?")')
    for line in f:
        m = r.split(line)
        nline = ''
        for token in m:
            if token.find('#') != -1 and token[0] != '"':
                nline += token[:token.find('#')]
                break
            else:
                nline += token
        filelines.append(nline)
Run Code Online (Sandbox Code Playgroud)

有没有办法在没有for循环的情况下找到不在引号内的第一个散列(即通过正则表达式?)

例子:

' "Phone #":"555-1234" ' -> ' "Phone #":"555-1234" '
' "Phone "#:"555-1234" ' -> ' "Phone "'
'#"Phone #":"555-1234" ' -> ''
' "Phone #":"555-1234" #Comment' -> ' "Phone #":"555-1234" '
Run Code Online (Sandbox Code Playgroud)

编辑:这是一个由user2357112创建的纯正则表达式解决方案.我测试了它,效果很好:

filelines = []
r = re.compile('(?:"[^"]*"|[^"#])*(#)') …
Run Code Online (Sandbox Code Playgroud)

python regex quotes comments strip

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

ZeroMQ XPUB/XSUB 严重缺陷?

XPUB/XSUB 套接字类型似乎有一个难以解决的严重缺陷:

XUBSUB

这是我对该中心节点的实现:

#include <zmq.hpp>

int main()
{
    zmq::context_t context(1);

    //Incoming publications come here
    zmq::socket_t sub(context, ZMQ_XSUB);
    sub.bind("ipc://subscriber.ipc");

    //Outgoing publications go out through here.
    zmq::socket_t pub(context, ZMQ_XPUB);
    pub.bind("ipc://publisher.ipc");

    zmq::proxy(sub, pub, nullptr);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当然,问题是慢木匠综合症。如果我将一个新发布者连接到 XSUB 并发布一些消息,它们就会消失:

#include "zhelpers.hpp"

int main () {
    //  Prepare our context and publisher
    zmq::context_t context(1);
    zmq::socket_t publisher(context, ZMQ_PUB);
    publisher.connect("ipc://subscriber.ipc");

    s_sendmore (publisher, "B");
    s_send (publisher, "Disappears into the void!!");

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我sleep(1)连接到 XSUB 后,它会神奇地工作:

#include "zhelpers.hpp"

int main () {
    //  Prepare …
Run Code Online (Sandbox Code Playgroud)

c++ zeromq

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

从字符串解析有效的JSON对象或数组

我有一个字符串,可以是以下两种形式之一:

name multi word description {...}
Run Code Online (Sandbox Code Playgroud)

要么

name multi word description [...]
Run Code Online (Sandbox Code Playgroud)

其中{...}[...]是有效的JSON。我对仅解析字符串的JSON部分感兴趣,但是我不确定做到这一点的最佳方法(尤其是因为我不知道字符串将是两种形式中的哪种)。这是我目前的方法:

import json

string = 'bob1: The ceo of the company {"salary": 100000}' 
o_ind = string.find('{')
a_ind = string.find('[')

if o_ind == -1 and a_ind == -1:
    print("Could not find JSON")
    exit(0)

index = min(o_ind, a_ind)
if index == -1:
    index = max(o_ind, a_ind)

json = json.loads(string[index:])
print(json)
Run Code Online (Sandbox Code Playgroud)

它有效,但是我不禁觉得它可以做得更好。我以为可能是正则表达式,但是在匹配子对象和数组而不是最外层的json对象或数组时遇到了麻烦。有什么建议么?

python regex python-3.x

3
推荐指数
1
解决办法
7191
查看次数

Python下一步并发送相同的生成器

根据我的理解,我写的这段python表现并不像我期望的那样yield.也许有人可以启发我.

def printvar():
    yield 3
    data = yield
    print(data)
    data = yield
    print(data)

x = printvar()
print(next(x))
x.send(4)
x.send(5)
Run Code Online (Sandbox Code Playgroud)

我期待的是:

3
4
5
Run Code Online (Sandbox Code Playgroud)

我得到了什么:

3
5
Run Code Online (Sandbox Code Playgroud)

谁能解释这种行为?

python yield send next

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

使用Python库而不是全局安装它们

我有一个python脚本,我想部署到各种PC运行测试,我需要使用第三方库pysnmp.由于我不想pysnmp在每台目标PC上手动安装,我想我可以将pysnmp(和相关的)eggs放在一个eggs/目录中,然后在导入之前将其附加到python路径:

import sys
sys.path.append("./eggs/pysnmp-4.2.5-py3.4.egg")
sys.path.append("./eggs/pyasn1-0.1.7-py3.3.egg")
from pysnmp.entity.rfc3413.oneliner import cmdgen
Run Code Online (Sandbox Code Playgroud)

只要我在包含的目录中执行脚本,这就像预期的那样工作eggs/,但它似乎相当手动和杂乱.是否有一种可移植的方式告诉python只是在[path to module]/eggs/我想要导入时搜索?

python egg pythonpath

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

用于批量元数据更新的 gcloud 命令

我正在尝试编写一个 gcloud 命令,对计算引擎实例进行批量元数据更新。

通常我可以通过管道传输gcloud compute instances listxargs gcloud compute instances add-metadata. 但是,这会受到阻碍,因为由于某些无法解释的原因,即使计算实例名称似乎是全局唯一的,也add-metadata需要实例名称区域。因此,现在我被迫尝试将两条数据(名称和区域)传输到 add-metadata 命令。如果我不提供两者,我会得到:

ERROR: (gcloud.compute.instances.add-metadata) Underspecified resource [worker-1]. Specify the [--zone] flag.
Run Code Online (Sandbox Code Playgroud)

我准备放弃 bash/xargs 咒语并切换到 python,但我想我应该先检查这里。

我有这个命令:

gcloud compute instances list \
        --filter="name~'worker' AND zone~'us-central1'" \
        --format 'value(name,zone)'
Run Code Online (Sandbox Code Playgroud)

它返回类似:

worker-1    us-central1-c
worker-2    us-central1-c
worker-3    us-central1-c
worker-4    us-central1-c
Run Code Online (Sandbox Code Playgroud)

然后我需要将它们通过管道传输到如下命令中:

gcloud compute instances add-metadata --zone=[zone goes here] --metadata myvalue=true [instance name goes here]
Run Code Online (Sandbox Code Playgroud)

但事实证明,单独使用 xargs 是很棘手/烦人的。有没有更好或更简单的方法来完成我正在尝试的事情?

bash xargs gcloud

0
推荐指数
1
解决办法
235
查看次数