小编Ant*_*yko的帖子

如何从当前Linux shell运行具有不同工作目录的程序?

使用Linux shell,如何从当前工作目录启动具有不同工作目录的程序?

例如,我有一个二进制文件helloworld,hello-world.txt在当前目录中创建该文件.该文件位于目录中/a.目前我在目录中/b.我想启动我的程序运行../a/helloworldhello-world.txt在第三个目录中的某个位置/c.

linux shell environment

327
推荐指数
7
解决办法
24万
查看次数

如何在C++中实现no-op宏(或模板)?

如何在C++中实现no-op宏?

#include <iostream>   

#ifdef NOOP       
    #define conditional_noop(x) what goes here?   
#else       
    #define conditional_noop(x) std::cout << (x)   
#endif   
int main() {       
    conditional_noop(123);   
}
Run Code Online (Sandbox Code Playgroud)

我希望在定义NOOP时不执行任何操作,并且在未定义NOOP时打印"123".

c c++ macros templates

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

为什么Python不识别我的utf-8编码源文件?

这是一个带有非ASCII字符的tmp.py:

if __name__ == "__main__":
    s = 'ß'
    print(s)
Run Code Online (Sandbox Code Playgroud)

运行它我收到以下错误:

Traceback (most recent call last):
  File ".\tmp.py", line 3, in <module>
    print(s)
  File "C:\Python32\lib\encodings\cp866.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_map)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\xdf' in position 0: character maps to <undefined>
Run Code Online (Sandbox Code Playgroud)

Python文档:

默认情况下,Python源文件被视为以UTF-8编码...

我检查编码的方法是使用Firefox(也许有人会建议更明显的东西).我在Firefox中打开tmp.py,如果我选择View-> Character Encoding-> Unicode(UTF-8),它看起来没问题,就像它在这个问题中看到的那样(wthß符号).

如果我把:

# -*- encoding: utf-8 -*-
Run Code Online (Sandbox Code Playgroud)

作为tmp.py中的第一个字符串,它不会改变任何内容 - 错误仍然存​​在.

有人可以帮我弄清楚我做错了什么吗?

python encoding utf-8 python-3.x

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

Python的unittest和unittest2模块有什么区别?

我目前正在研究一些使用unittest2模块的代码.我怀疑这段代码是用于python2的.可以使用python3 unittest作为unittest2的替代品吗?两者有什么区别?

compatibility python-module python-2.x python-3.x python-unittest

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

当我从Docker容器内部运行它时,gdb没有遇到任何断点

问题

如果我从主机编译并运行,我能够设置并达到断点,但如果我从docker容器中执行此操作,gdb不会触及已设置的断点.

重现的步骤(所有片段都准备好复制粘贴)

创建一个docker文件:

cat << EOF > Dockerfile
FROM ubuntu
RUN apt-get update
RUN apt-get install -y build-essential gdb
EOF
Run Code Online (Sandbox Code Playgroud)

构建映像并在其中运行交互式会话:

docker build -t gdb_problem_testing . && docker run --rm -it  gdb_problem_testing bash
Run Code Online (Sandbox Code Playgroud)

从容器内部创建小main.cpp,编译并运行gdb:

cat <<EOF > main.cpp && g++ -g main.cpp && gdb -ex 'break 5' -ex 'run' ./a.out
#include <iostream>

int main(int argc, const char *argv[])
{
    std::cout << "hi\n";
    return 0;
}
EOF
Run Code Online (Sandbox Code Playgroud)

观察gdb输出:

GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1
[Skipped gdb greeting]
Reading symbols from ./a.out...done. …
Run Code Online (Sandbox Code Playgroud)

linux debugging permissions gdb docker

14
推荐指数
2
解决办法
4008
查看次数

当我使用未设置的变量时,可以警告我吗?

当我使用未设置的变量时,有没有办法告诉make抱怨?类似于set -ubash的东西?

我花了二十分钟调试我的Makefile,因为变量名称中有一个符号拼写错误.

makefile

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

如何在运行时指定boost multi_array的退化维数?

我有一个3D multi_array,我想使用运行时指定的维度制作2D切片.我知道退化维度的索引和我想要在该简并维度中提取的切片的索引.目前丑陋的解决方案看起来像这样:

if (0 == degenerate_dimension)
{
    Slice slice = input_array[boost::indices[slice_index][range()][range()]];
}
else if (1 == degenerate_dimension)
{
    Slice slice = input_array[boost::indices[range()][slice_index][range()]];
}
else if (2 == degenerate_dimension)
{
    Slice slice = input_array[boost::indices[range()][range()][slice_index]];
}
Run Code Online (Sandbox Code Playgroud)

有没有更美观的方法来构造index_gen对象?像这样的东西:

var slicer;
for(int i = 0; i < 3; ++i) {
    if (degenerate_dimension == i)
        slicer = boost::indices[slice_index];
    else
        slicer = boost::indices[range()];
}
Slice slice = input_array[slicer];
Run Code Online (Sandbox Code Playgroud)

似乎每次对boost :: indices :: operator []的后续调用都会返回一个不同的类型,具体取决于维度(即先前调用的数量),因此无法使用单个变量来保存临时的index_gen对象.

c++ boost boost-multi-array

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

使用枚举名称而不是值对 Pydantic 字段进行编码

我有一个枚举类:

class Group(enum.Enum):
    user = 0
    manager = 1
    admin = 2
Run Code Online (Sandbox Code Playgroud)

我有一个 pydantic 模型:

class User(BaseModel):
    id: int
    username: str
    group: Group
Run Code Online (Sandbox Code Playgroud)

它生成序列化为 json 的内容如下:

{
    "id": 5,
    "username": "admin",
    "group": 2
}
Run Code Online (Sandbox Code Playgroud)

但是,我想获取枚举字段的名称而不是其值,所以它应该是:

{
    "id": 5,
    "username": "admin",
    "group": "admin"
}
Run Code Online (Sandbox Code Playgroud)

这有可能吗?如果是这样,怎么办?

python enums model pydantic

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

从<sys/stat.h>调用stat会出现"对于已定义的数据类型而言值太大"错误

鉴于tmp.c:

#include <sys/stat.h>
#include <errno.h>
#include <stdio.h>

int main(int argc, const char *argv[])
{
    struct stat st;
    if (stat(argv[1], &st) != 0)
    {
        perror("Error calling stat");
    }

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

Error calling stat: Value too large for defined data type当我在大文件(~2.5 Gb)上运行程序时,我得到了.

c posix runtime-error system-calls

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

是否有一种惯用的方法来在C++中创建委托集合?

我想在集合中存储具有类似签名的函数,以执行以下操作:

f(vector<Order>& orders, vector<Function>& functions) {
    foreach(process_orders in functions) process_orders(orders);
}
Run Code Online (Sandbox Code Playgroud)

我想到了函数指针:

void GiveCoolOrdersToBob(Order);
void GiveStupidOrdersToJohn(Order);

typedef void (*Function)(Order);
vector<Function> functions;
functions.push_back(&GiveStupidOrdersToJohn);
functions.push_back(&GiveCoolOrdersToBob);
Run Code Online (Sandbox Code Playgroud)

或多态函数对象:

struct IOrderFunction {
    virtual void operator()(Order) = 0;
}

struct GiveCoolOrdersToBob : IOrderFunction {
    ...
}

struct GiveStupidOrdersToJohn : IOrderFunction {
    ...
}

vector<IOrderFunction*> functions;
functions.push_back(new GiveStupidOrdersToJohn());
functions.push_back(new GiveCoolOrdersToBob());
Run Code Online (Sandbox Code Playgroud)

c++ delegates function-pointers function-object

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