小编Esc*_*alo的帖子

使用Python代码片段编写LaTeX文档

我正在使用LaTeX编写有关Python的文档.本文档将包含代码片段(示例).

我可以使用这个verbatim环境,但在我开始之前,我想知道你是否知道任何为Python代码提供环境的LaTeX样式文件.语法高亮将是一个加号.

谢谢.

编辑:

我必须指出,包装minted正是我想要的.它具有漂亮的语法高亮,使用起来非常简单.检查此问题以了解更多信息.

python latex

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

c ++ 11在信号处理程序中使用条件变量

std::condition_variable::notify_one在信号处理程序中使用是否安全?例:

enum State {
  DoNot,
  Do,
};
State state;
std::mutex mutex;

// worker thread
std::thread th = std::thread([]()
{
    std::unique_lock<std::mutex> lc(mutex);
    cv.wait(lc, []() { return state; });
});

//signal handler
void handler(int sig)
{
    if (sig == SOME_SIG)
    {
        std::unique_lock<std::mutex> lc(mutex);
        state = Do;
        cv.notify_one();
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ posix signals c++11

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

将C库与非标准名称链接

我正在使用gcc编译一个程序,我需要链接到一个非标准名称的C库; 它被称为stuff.a而不是libstuff.a.

我无法更改文件的名称(权限问题).

我不想包含完整的库(即使用gcc program.c stuff.a -oprogram)

我想编译为gcc program.c -L/path/to/library/ -lstuff -oprogram但是gcc不会找到库(因为它没有被调用libstuff.a).

我正在开发一个Linux机器.

如何完成(动态)链接?

编辑:

谢谢大家,我为一个措辞不好的问题道歉.

我甚至没有共享对象(我以为我可以动态链接到*.a文件),所以这让很多人困惑.再一次,为我的无知道歉.

我最终做的是在本地目录中创建共享对象,将该位置附加到我的LD_LIBRARY_PATH环境变量,然后再次链接.

它就像一个魅力(从1.3M可执行到5.8K).

再次感谢.

c linker gcc

7
推荐指数
3
解决办法
6644
查看次数

如何从包的更深层部分访问__init__.py变量

我为另一个__init__.py问题道歉.

我有以下包结构:

+contrib
  +--__init__.py
  |
  +database
      +--__init__.py
      |
      +--connection.py
Run Code Online (Sandbox Code Playgroud)

在顶级__init__.py我定义:USER='me'.如果我import contrib从命令行,那么我可以访问contrib.USER.

现在,我想contrib.user从withih 访问,connection.py但我不能这样做.

__init__.py我发布时会调用顶级from contrib.database import connection,因此Python实际上是在创建参数USER.

所以问题是:如何__init__.py级中访问顶级声明的参数和变量.

谢谢.

编辑:

我知道你可以添加import contribconnection.py,但似乎重复,因为它是明显的(错误呢?),如果你需要connection.py你已经导入contrib.

python

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

简单高效地分发C++/Boost源代码(合并)

我的工作主要是工程分析,但我发现自己在同事中越来越频繁地分发代码.一个巨大的痛苦是并非每个用户都精通编译源代码的复杂性,而且我无法分发可执行文件.

我一直在使用Boost使用C++,问题是我无法请求每个网络的每个sysadmin安装库.相反,我想分发一个源文件(或尽可能少),以便用户可以g++ source.c -o program.

所以,问题是:你能用你的代码打包 Boost库,最终得到一个文件吗?我在谈论Boost库,它们只是"标题"或"仅模板".

作为灵感,请查看SQliteLemon Parser Generator的分布情况; 作者将这些东西合并为一个单独的源文件,这对于编译来说是微不足道的.

谢谢.

编辑:

SO中相关问题适用于Windows环境.我在Linux工作.

c++ boost software-distribution amalgamation

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

在删除ANSI颜色代码时打印到STDOUT和日志文件

我有以下功能来着色我的屏幕消息:

def error(string):
    return '\033[31;1m' + string + '\033[0m'

def standout(string):
    return '\033[34;1m' + string + '\033[0m'
Run Code Online (Sandbox Code Playgroud)

我用它们如下:

print error('There was a problem with the program')
print "This is normal " + standout("and this stands out")
Run Code Online (Sandbox Code Playgroud)

我想将输出记录到一个文件(除了STDOUT)没有ANSI颜色代码,希望无需在每个print语句中添加第二个"记录"行.

原因是,如果你只是python program.py > out那么文件out将具有ANSI颜色代码,如果你在纯文本编辑器中打开,这看起来很糟糕.

有什么建议?

python logging stdout ansi-colors

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

有效使用C++ iomanip库

Vector用C++ 创建了一个类,它对我的​​问题非常有用.我现在正在清理它,我遇到了以下代码:

std::ostream& operator<<(std::ostream &output, const Vector &v){
  output<<"["
    <<std::setiosflags(std::ios::right | std::ios::scientific)
    <<std::setw(23)
    <<std::setprecision(16)
    <<v._x<<", "
    <<std::setiosflags(std::ios::right | std::ios::scientific)
    <<std::setw(23)
    <<std::setprecision(16)
    <<v._y<<", "
    <<std::setiosflags(std::ios::right | std::ios::scientific)
    <<std::setw(23)
    <<std::setprecision(16)
    <<v._z<<"]";
  return output;
} 
Run Code Online (Sandbox Code Playgroud)

该代码允许将矢量打印为std::cout<<v<<std::endl;.每个数字有23个空格,其中16个是小数.文本右对齐,以便打印:

 1.123456123456e+01
-1.123456123456e+01
Run Code Online (Sandbox Code Playgroud)

代替

1.123456123456e+01
-1.123456123456e+01
Run Code Online (Sandbox Code Playgroud)

代码似乎非常重复.你怎么能"存储"的格式(所有的setiosflags,setwsetprecision语句),这样你就会这样说:"这个给定的格式打印以标准方式中的字符,但数字".

谢谢!

编辑

根据Rob Adams的评论,我改变了我的丑陋代码(正如其他人所指出的那样,会让"下一个人"的精确度变得更加简洁(和正确)):

std::ostream& operator<<(std::ostream &output, const Vector &v){
  std::ios_base::fmtflags f = output.flags(std::ios::right | std::ios::scientific);
  std::streamsize p = output.precision(16);
  output<<"["
    <<std::setw(23)<<v._x<<", "
    <<std::setw(23)<<v._y<<", "
    <<std::setw(23)<<v._z
    <<"]";
  output.flags(f);
  output.precision(p);
  return output; …
Run Code Online (Sandbox Code Playgroud)

c++ iostream stream iomanip

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

在内存映射中使用 reinterpret_cast 时处理未定义的行为

为避免复制大量数据,最好将mmap二进制文件直接处理原始数据。这种方法有几个优点,包括将分页委托给操作系统。不幸的是,我的理解是明显的实现会导致未定义行为(UB)。

我的用例如下:创建一个二进制文件,其中包含一些标识格式和提供元数据的标头(在这种情况下只是double值的数量)。文件的其余部分包含我希望处理的原始二进制值,而不必先将文件复制到本地缓冲区中(这就是我首先对文件进行内存映射的原因)。下面的程序是一个完整的(如果简单)示例(我相信所有标记为UB[X]导致 UB 的地方):

// C++ Standard Library
#include <algorithm>
#include <cstddef>
#include <cstdint>
#include <fstream>
#include <iostream>
#include <numeric>

// POSIX Library (for mmap)
#include <fcntl.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <unistd.h>

constexpr char MAGIC[8] = {"1234567"};

struct Header {
  char          magic[sizeof(MAGIC)] = {'\0'};
  std::uint64_t size                 = {0};
};
static_assert(sizeof(Header) == 16, "Header size should be 16 bytes");
static_assert(alignof(Header) == 8, "Header alignment should be 8 bytes");

void write_binary_data(const char* filename) {
  Header …
Run Code Online (Sandbox Code Playgroud)

c++ undefined-behavior memory-mapping reinterpret-cast

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

符号链接到文件夹中的最新文件

我有一个程序,需要各种文件的路径.这些文件位于不同的文件夹中,并且会不定期地不断更新.

当文件被更新,他们改变了名称,因此,例如,文件夹中dir1我有fv01fv02.当天晚些时候有人补充说fv02_v1; 有人加入后的第二天fv03等等.换句话说,我总是有一个更新的文件,但名称不同.

我想在我的"运行"文件夹中为这些文件创建一个符号链接,这样所述链接始终指向创建的最新文件.

我可以用Python或Bash做到这一点,但我想知道那里有什么,因为这不是一个罕见的问题.

你会怎么做?

谢谢.

胡安

PS.我的操作系统是Linux.我目前有一个简单的守护进程(Python),每隔一段时间(每分钟刷新一次)查看最新文件.对我来说似乎有点矫枉过正.

linux symlink automation

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

C++原子"比较并设置为零或递增"

考虑以下(人为的)内存竞技场(池):

template<typename T>
class Arena {
 public:
  Arena(size_t size)
      : m_buffer(new char[size * sizeof(T)]),
        m_next_available(0),
        m_size(size) { }

  void* placement() {
    return m_buffer.get() + (m_next_available++) * sizeof(T);
  }

 private:
  std::unique_ptr<char> m_buffer;
  std::atomic<size_t> m_next_available;  
  size_t m_size;
};
Run Code Online (Sandbox Code Playgroud)

如您所见,它使用原子变量m_next_available来跟踪下一个可用内存块.

当请求新的内存块时,Arena实例应该提供指向适当块的指针(如图所示),并获得下一个可用块; 这是我遇到问题的地方.

我想要一个能够表达以下内容的原子操作:如果下一个可用块大于竞技场大小,那么它应该设置为零(我将覆盖内存位置).

作为参考,下面给出了它的非原子版本Arena.注意当我超过五个元素(大小Arena)时,新元素的地址是与第一个块对应的地址(如预期的那样).

#include<cstddef>
#include<iostream>
#include<memory>
template<typename T>
class Arena {
 public:
  Arena(size_t size)
      : m_buffer(new char[size * sizeof(T)]),
        m_next_available(0),
        m_size(size) { }  
  void* placement() {
    // this is the logic that I'd like …
Run Code Online (Sandbox Code Playgroud)

c++ atomic placement-new c++11

6
推荐指数
0
解决办法
1474
查看次数