小编pyt*_*hor的帖子

如何动态更改Perl模块路径?

我有两个不同版本的Perl模块.目前,关键脚本使用环境变量指定的模块版本,系统依赖于不同用户运行的不同任务.用户的环境将决定使用哪个版本的Perl模块.

现在我想将其更改为Perl脚本中指定的版本,即取决于传递的选项.不幸的是,这样的代码:

if ($new){ use lib "newdir"; }
else{ use lib "olddir"; }
use module;
Run Code Online (Sandbox Code Playgroud)

不起作用.Perl只需将newdirolddir附加到@INC然后运行脚本.

如何动态指定要使用的模块?

perl module

9
推荐指数
2
解决办法
2144
查看次数

vptr在销毁期间是否会发生变化?

我正在看这篇文章,它说"在进入基类析构函数后,该对象成为基类对象,而C++的所有部分 - 虚函数,dynamic_casts等 - 以这种方式对待它." 这是否意味着vptr在破坏期间发生了变化?这是怎么发生的?

c++ destruction vptr

9
推荐指数
2
解决办法
1750
查看次数

C++ std :: string和NULL const char*

我在C++中使用两个大代码,一个用"C风格"完成,另一个用"C++风格"完成.

C类代码具有返回const char*的函数,而C++代码在很多地方都有类似的东西

const char* somecstylefunction();
...
std::string imacppstring = somecstylefunction();
Run Code Online (Sandbox Code Playgroud)

它从C样式代码返回的const char*构造字符串.

这有效,直到C样式代码更改并开始有时返回NULL指针.这当然会导致seg故障.

周围有很多代码,所以我想以最简约的方式解决这个问题.预期的行为是imacppstring在这种情况下将是空字符串.这有一个很好的,光滑的解决方案吗?

更新

这些函数返回的const char*始终是指向静态字符串的指针.它们主要用于传递有关函数中任何意外行为的信息性消息(最有可能记录日志).决定在"无报告"上返回NULL是很好的,因为那时你可以使用返回值作为条件,即

if (somecstylefunction()) do_something;
Run Code Online (Sandbox Code Playgroud)

而在函数返回静态字符串""之前;

这是否是一个好主意,我不打算触及这个代码,无论如何这都不取决于我.

我想避免的是跟踪每个字符串初始化以添加包装函数.

c++ string null

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

functools.partial不适用于multiprocessing.Pool.map吗?

我有简化的代码,如下所示:

run = functools.partial(run, grep=options.grep, print_only=options.print_only, force=options.force)

if not options.single and not options.print_only and options.n > 0:
    pool = multiprocessing.Pool(options.n)
    Map = pool.map
else: Map = map

for f in args:
    with open(f) as fh: Map(run, fh)

try:
    pool.close()
    pool.join()
except NameError: pass
Run Code Online (Sandbox Code Playgroud)

当我在单进程模式下运行它时工作正常,但是失败并出现这样的错误

TypeError: type 'partial' takes at least one argument
Run Code Online (Sandbox Code Playgroud)

通过多处理模块与长调用栈混合在一起.这是怎么回事?

我正在使用python 2.6.1.

python multiprocessing

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

在tr1 :: hash中使用boost :: tuple

我想定义std::tr1::hash<boost::tuple<A,B,C> >.但是当我给出一个完整的瞬间时,我得到的错误并没有出现.这是代码

namespace std{

namespace tr1{
template<typename A, typename B, typename C>
struct hash<boost::tuple<A,B,C> >{
    size_t operator()(const boost::tuple<A,B,C> &t) const{
        size_t seed = 0;
        boost::hash_combine(seed, t.get<0>());
        boost::hash_combine(seed, t.get<1>());
        boost::hash_combine(seed, t.get<2>());
        return seed;
    }
};

template<>
struct hash<boost::tuple<int,int,int> >{
    size_t operator()(const boost::tuple<int,int,int> &t) const{
        size_t seed = 0;
        boost::hash_combine(seed, t.get<0>());
        boost::hash_combine(seed, t.get<1>());
        boost::hash_combine(seed, t.get<2>());
        return seed;
    }
};
}
}
Run Code Online (Sandbox Code Playgroud)

第一部分给出了这个错误

unordered.hpp: In member function 'size_t std::tr1::hash<boost::tuples::tuple<A, B, C, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type> >::operator()(const boost::tuples::tuple<A, B, …
Run Code Online (Sandbox Code Playgroud)

c++ templates

8
推荐指数
2
解决办法
814
查看次数

Python的Popen清理

我想使用python等效于在perl中管理一些shell命令.类似于open的python版本(PIPE,"command |").

我转到子进程模块并尝试这个:

p = subprocess.Popen("zgrep thingiwant largefile", shell=True, stdout=subprocess.PIPE)
Run Code Online (Sandbox Code Playgroud)

这适用于以与perl相同的方式读取输出,但它不能自我清理.当我退出翻译时,我明白了

grep: writing output: Broken pipe
Run Code Online (Sandbox Code Playgroud)

几百万次喷出stderr.我想我天真地希望所有这些都能得到照顾,但事实并非如此.在p上调用终止或终止似乎没有帮助.查看进程表,我看到这会杀死/ bin/sh进程,但是让子gzip保持原位以抱怨管道损坏.

这样做的正确方法是什么?

python popen resource-cleanup

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

条件类型定义

我确信boost有一些功能可以做到这一点,但我不太了解相关的库.我有一个模板类,这是非常基本的,除了我需要定义条件类型的一个扭曲.这是我想要的伪代码

struct PlaceHolder {};
    template <typename T>
class C{
    typedef (T == PlaceHolder ? void : T) usefulType;
};
Run Code Online (Sandbox Code Playgroud)

如何编写有条件的那种类型?

c++ templates types

5
推荐指数
2
解决办法
1591
查看次数

Python子进程,子shell和重定向

我想使用子shell的魔力和python子进程模块的重定向,但它似乎不起作用,抱怨意外的令牌是括号.例如,命令

cat <(head tmp)

传递给子进程时给出了这个

>>> subprocess.Popen("cat <(head tmp)", shell=True)
<subprocess.Popen object at 0x2b9bfef30350>
>>> /bin/sh: -c: line 0: syntax error near unexpected token `('
/bin/sh: -c: line 0: `cat <(head tmp)'
Run Code Online (Sandbox Code Playgroud)

python bash subprocess subshell

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

在OS-X上以交互模式在python中键入utf-8字符

我试图在交互模式下将一些西班牙语字符键入字符串.例如,option+e e要生成'é'以便我做出类似的陈述string="él".这适用于终端,但在python(我安装的任何版本,我有几个)它没有.它什么都不产生.这包括尝试粘贴字符.这正是这个问题中描述的问题,特别是关于粘贴的部分以及他对Alex的问题的评论,他指出Alex的答案没有解决关于utf-8字符的复制/粘贴失败的问题.我怎样才能做到这一点?

python unicode macos

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

元功能测试物体是否与增压范围兼容

是否存在或者如何编写一个测试类是否兼容的元函数类boost::range?我想用这个boost::enable成语,比如说

template <typename T>
Constructor::Constructor(const T& t, __attribute__((unused)) typename boost::enable_if<is_range_compatible<T> >::type* aux=NULL)
Run Code Online (Sandbox Code Playgroud)

为适当的is_range_compatible元功能.我从pretty_print 了解is_container,它捕获了很多案例,但不是所有可用的东西boost::range.

编辑这是使用C++ 03,因此我无法访问C++ 11功能.我正在使用旧的gcc 4.1和1.51.

c++ templates boost type-traits boost-range

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