其他分享
首页 > 其他分享> > c – QProcess多平台命令

c – QProcess多平台命令

作者:互联网

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

为此,在windows下,我使用QProcess :: execute(“cmd […]”);.

但是,如果我使用其他操作系统(如Linux),这将无法工作.

所以,我想知道使代码可移植的最佳解决方案是干扰mutliplatform脚本解决方案,例如TCL例如.

所以我使用:QProcess:execute(“tclsh text.tcl”);它的工作原理.

但是,我对这个问题有三个问题.因为我不确定我做了什么.

>在执行它的任何地方,execute()都会在Windows和Linux下使用test.tcl文件执行tclsh吗?它似乎这样做,但我想确定!是否有可能发生的不良情况?
>这是一个很好的解决方案吗?我知道很多人比我更有经验,我会感激任何我能学到的东西!
>为什么不使用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-2,linux,qt,tcl,multiplatform
来源: https://codeday.me/bug/20190625/1284900.html