c++ - 在 C++ 中使用 popen 执行 perl 命令时出错

标签 c++ perl popen

在我的 C++ 程序中,我想执行一个 perl 命令并读取执行返回的输出。我为此使用 popen,但在执行命令时出现错误:

命令:

string cmd = "perl -ne 's/^\\S+\\s//; if ((/" +
            pattern1+ " START/ .. /" + pattern2+ " END/) && /find/)"
            " { print \"$_\"}' file";
stream = popen(cmd.c_str(),"r");

如果我在命令行中执行此命令它会工作,但在 C++ 中我会收到此错误:

Search pattern not terminated at -e line 1.

在命令行中工作的命令是,在 C++ 中我已经转义了 '\' 和 '"':

perl -ne 's/^\\S+\\s//; if ((/aaa START/ .. /bbb END/) && /find/) { print "$_"}' file

如果我执行这个命令,它会起作用:“perl -ne print $_ file”。 但是我的初始命令没有。 我做错了什么。谢谢。

最佳答案

这是你的转义符 \。当 \\ 变成 \ 时,您必须在 C++ 字符串中将它们加倍。然后 shell 会按照您在命令行上看到的那样进行处理。即另一轮 \\ 变成了 \

关于c++ - 在 C++ 中使用 popen 执行 perl 命令时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20118076/

相关文章:

c++ - osx 上的编译错误 "Undefined symbols"

c++ - 自定义迭代器和 STL 算法错误

c++ - 模板类的非成员比较运算符

perl - 在 Perl 中调用命令行函数并将输出作为字符串

perl - 从 BEGIN block 中调用 Perl fork

python - 操作系统错误 : [Errno 8] Exec format error when running subprocess. 打开

c++ - _popen 使用引号时工作不正确

c++ - LNK2005 和 LNK1169 错误 - C++

perl - Perl 模块是否知道它的安装位置?

python - 使用 universal_newlines=True(bufsize=1)和使用 Popen 的默认参数有什么区别