我正在使用LaTeX编写有关Python的文档.本文档将包含代码片段(示例).
我可以使用这个verbatim环境,但在我开始之前,我想知道你是否知道任何为Python代码提供环境的LaTeX样式文件.语法高亮将是一个加号.
谢谢.
编辑:
我必须指出,包装minted正是我想要的.它具有漂亮的语法高亮,使用起来非常简单.检查此问题以了解更多信息.
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) 我正在使用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).
再次感谢.
我为另一个__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 contrib到connection.py,但似乎重复,因为它是明显的(错误呢?),如果你需要connection.py你已经导入contrib.
我的工作主要是工程分析,但我发现自己在同事中越来越频繁地分发代码.一个巨大的痛苦是并非每个用户都精通编译源代码的复杂性,而且我无法分发可执行文件.
我一直在使用Boost使用C++,问题是我无法请求每个网络的每个sysadmin安装库.相反,我想分发一个源文件(或尽可能少),以便用户可以g++ source.c -o program.
所以,问题是:你能用你的代码打包 Boost库,最终得到一个文件吗?我在谈论Boost库,它们只是"标题"或"仅模板".
作为灵感,请查看SQlite或Lemon Parser Generator的分布情况; 作者将这些东西合并为一个单独的源文件,这对于编译来说是微不足道的.
谢谢.
编辑:
我有以下功能来着色我的屏幕消息:
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颜色代码,如果你在纯文本编辑器中打开,这看起来很糟糕.
有什么建议?
我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,setw和setprecision语句),这样你就会这样说:"这个给定的格式打印以标准方式中的字符,但数字".
谢谢!
编辑
根据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) 为避免复制大量数据,最好将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) 我有一个程序,需要各种文件的路径.这些文件位于不同的文件夹中,并且会不定期地不断更新.
当文件被更新,他们改变了名称,因此,例如,文件夹中dir1我有fv01和fv02.当天晚些时候有人补充说fv02_v1; 有人加入后的第二天fv03等等.换句话说,我总是有一个更新的文件,但名称不同.
我想在我的"运行"文件夹中为这些文件创建一个符号链接,这样所述链接始终指向创建的最新文件.
我可以用Python或Bash做到这一点,但我想知道那里有什么,因为这不是一个罕见的问题.
你会怎么做?
谢谢.
胡安
PS.我的操作系统是Linux.我目前有一个简单的守护进程(Python),每隔一段时间(每分钟刷新一次)查看最新文件.对我来说似乎有点矫枉过正.
考虑以下(人为的)内存竞技场(池):
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)