【问题标题】:QProcess can't write commands to programQProcess 无法将命令写入程序
【发布时间】:2021-05-19 03:03:00
【问题描述】:

所以我想用 QProcess 打开stockfish 并编写命令isready,stockfish 回复readyok。我在终端中尝试了完全相同的命令,它工作正常。但是,当我尝试在 QProcess 中执行此操作时,它只会在 stockfish 打开时读取开头行“Stockfish 开发人员的 Stockfish 100521(请参阅 AUTHORS 文件)”。我的命令后它没有回复“readyok”。

是我写错了我的命令还是我的等待命令错了?如果这个问题的结构或支持不正确,我很抱歉,因为我是新手。

QProcess OProcess;
QString Command;    //Contains the command to be executed
QStringList args;   //Contains arguments of the command

Command = "path/Stockfish/src/stockfish";
args<<"";

OProcess.start(Command,args,QIODevice::ReadWrite); //Starts execution of command
OProcess.waitForFinished();                       //Waits for execution to complete

QString StdOut      =   OProcess.readAllStandardOutput();  //Reads standard output
QString StdError    =   OProcess.readAllStandardError();   //Reads standard error

qDebug()<< "\n Printing the standard output..........\n";
qDebug()<< endl<<StdOut;
qDebug()<<"\n Printing the standard error..........\n";
qDebug()<<endl<<StdError;

OProcess.write("isready");
OProcess.waitForFinished();  //Waits for execution to complete

OProcess.waitForReadyRead();

 StdOut      =   OProcess.readAllStandardOutput();  //Reads standard output
 StdError    =   OProcess.readAllStandardError();   //Reads standard error

        qDebug()<< "\n Printing the standard output:\n";
        qDebug()<< endl<<StdOut;
        qDebug()<<"\n Printing the standard error:\n";
        qDebug()<<endl<<StdError;
return 0;

【问题讨论】:

    标签: qt qprocess stockfish


    【解决方案1】:

    您需要等待触发此信号 void readyReadStandardError() void readyReadStandardOutput() 并在从标准错误或输出缓冲区读取之后。

    【讨论】:

    • 我是否还需要等待读数完成才能触发我的命令?因为我还尝试进行连接(OProcess,SIGNAL(readyReadStandardOutput()),this,SLOT(readFromEngine()),但我仍然在开始读取开始文本后直接写出我的命令。那也不起作用
    猜你喜欢
    • 2012-11-08
    • 1970-01-01
    • 2020-12-12
    • 2013-11-08
    • 2015-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多