c++ - QProcess 多平台命令

标签 c++ linux qt tcl multiplatform

我需要使用 QProcess 启动一些脚本。

为此,在 Windows 下,我使用 QProcess::execute("cmd [...]");

但是,如果我在其他一些操作系统(例如 Linux)下,这将不起作用。

所以,我想知道使该代码可移植的最佳解决方案是否是干扰多平台脚本解决方案,例如 TCL。

所以我使用:QProcess:execute("tclsh text.tcl"); 它有效。

但是,我收到了关于该问题的三个问题。因为我不确定自己做了什么。

  • execute() 是否会在 Windows 和 Linux 下执行 tclsh 和文件 test.tcl?似乎是这样,但我想确定一下!有没有可能发生的坏情况?
  • 这是一个好的解决方案吗?我知道很多人的经验比我丰富得多,如果我能学到任何东西,我将不胜感激!
  • 为什么不使用 std::system() ?它的便携性差吗?

最佳答案

虽然这不是一个完整的答案,但我可以指出一些事情。

特别是tclsh在Windows下相当开心;这是一个主要的支持平台。在实践中可能发生的主要问题是,如果您传递一个包含空格的文件名(由于社区实践的差异,这在 Windows 下明显比在 Unix 下更有可能发生)。但是,execute() 如您所写 没有问题。好吧,只要 tclsh 位于 PATH 上即可。

将 Tcl 脚本执行与 Qt 集成的另一个主要选项是将您的程序链接到 Tcl 二进制库并使用它。 Tcl 的 API 是针对 C 的,因此从 C++ 使用它应该非常简单(如果从 C++ 的角度来看有点笨拙):

// This holds the description of the API
#include "tcl.h"

// Initialize the Tcl library; *call only once*
Tcl_FindExecutable(NULL);

// Make an evaluation context
Tcl_Interp *interp = Tcl_CreateInterp();

// Execute a script loaded from a file (or whatever)
int resultCode = Tcl_Eval(interp, "source test.tcl");

// Check if an error happened and print the error if it did
if (resultCode == TCL_ERROR) {
    std::cerr << "ERROR: " << Tcl_GetString(Tcl_GetObjResult(interp)) << std::endl;
}

// Squelch the evaluation context
Tcl_DeleteInterp(interp);

我不是特别出色的 C++ 编码员,但这应该能说明问题。我不知道 QProcess::execute() vs std::system()

关于c++ - QProcess 多平台命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15967171/

相关文章:

c++ - Cmake 错误 : variables NOTFOUND when configuring or building openpose on windows 10

c++ - 混合编程 : Calling FORTRAN from C++

C++ 服务器不显示数据包

linux - linux将文件从usb复制到桌面脚本

不应该循环的代码(带 fork )正在循环

c++ - Qt 将信号连接到槽

c++ - 我可以将 "using namespace std"放入我的 namespace 中吗?

java - 将 $JAVA_HOME 设置为 opc,不能作为 oracle 访问

c++ - 无法在 Linux 中构建 QT 应用程序?

Qt + xapian 库