标签: qprocess

如何从QProcess获取STDOUT?

我以为我将使用以下代码从QProcess获取输出:

// Start the process
process.start(tr("php-cgi www/test.php"),QIODevice::ReadWrite);

// Wait for it to start
if(!process.waitForStarted())
    return 0;

// Continue reading the data until EOF reached
QByteArray data;

while(process.waitForReadyRead())
    data.append(process.readAll());

// Output the data
qDebug(data.data());
qDebug("Done!");
Run Code Online (Sandbox Code Playgroud)

我期待的是看到程序的输出打印到调试控制台,但我看到的只有:

完成!

我知道:

  • 程序启动正常,因为打印结束时的消息.
  • 该程序确实打印输出,因为在终端中运行完全相同的命令会产生一个长串的文本.

我在这做错了什么?

qt stdout process qprocess

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

将QProcess输出读取为字符串

我有一个像这样使用QProcess的代码.

int main(int argc, char *argv[])
{
    int status=0;
    QProcess pingProcess;
    QString ba;
    QString exec = "snmpget";
    QStringList params;
     params << "-v" << "2c" << "-c" << "public" << "10.18.32.52" <<    ".1.3.6.1.4.1.30966.1.2.1.1.1.5.10";
    status=pingProcess.execute(exec, params);
    pingProcess.close();
}
Run Code Online (Sandbox Code Playgroud)

这输出以下内容.

SNMPv2-SMI::enterprises.30966.1.2.1.1.1.5.10 = STRING: "0.1"
Run Code Online (Sandbox Code Playgroud)

我想把这个输出作为字符串.我搜索了这个,我找不到解决方案.提前致谢.

c++ qstring qt stdout qprocess

19
推荐指数
3
解决办法
3万
查看次数

QT在*nix上打开默认文件资源管理器

我有以下内容:

QProcess *process = new QProcess(this);
QString path = QDir::toNativeSeparators(QApplication::applicationPath);
#if defined(Q_OS_WIN)

process->start("explorer.exe",  QStringList() << path);

#elif defined(Q_OS_MAC)

process->start("open", QStringList() << path);

#endif
Run Code Online (Sandbox Code Playgroud)

如何说Ubuntu可以达到相同的行为?

directory qt qt4 qprocess

16
推荐指数
1
解决办法
6774
查看次数

使用QProcess进行管道(或命令链接)

我正在使用Qt和bash,需要执行以下操作:

bash: cat file | grep string
Run Code Online (Sandbox Code Playgroud)

在Qt:

QString cmd = "cat file | grep string";
QProcess *process = new QProcess;
process->start(cmd);
process->waitForBytesWritten();
process->waitForFinished();
qDebug() << process->readAll();
Run Code Online (Sandbox Code Playgroud)

问题在于管道("|"),并且进程没有任何回复.如果没有("|"),就像

"cat file" 
Run Code Online (Sandbox Code Playgroud)

一切都好.我试过smth.喜欢

"cat file \\| grep string", 
"cat file \| grep string" 
Run Code Online (Sandbox Code Playgroud)

但结果是一样的.如果我复制命令并在bash中运行它一切正常.

QString::toAscii().data()
Run Code Online (Sandbox Code Playgroud)

和其他变换也有不好的结果.

c++ shell qt qprocess chain

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

如何使用Qt(C++)检查程序是否以其名称运行

如何使用Qt(C++)通过名称检查程序是否正在运行.

QProcess::pid做这个工作吗?我不知道如何使用它.请建议.

c++ qt process qprocess qt-creator

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

使用QProcess获取所有正在运行的进程信息

几天前我问过如何使用QProcess获取系统中所有正在运行的进程.我找到了一个可以将所有进程输出到文件的命令行:

C:\ WINDOWS\system32\wbem\wmic.exe"/OUTPUT:C:\ProcessList.txt PROCESS获取标题

这将创建C:\ ProcessList.txt文件,其中包含系统中所有正在运行的进程.我想知道如何使用QProcess运行它并将其输出变为变量.

似乎每次我尝试运行它并且没有发生任何事情:

QString program = "C:\\WINDOWS\\system32\\wbem\\wmic.exe";
QStringList arguments;
arguments << "/OUTPUT:C:\\ProcessList.txt" <<"PROCESS"<< "get"<< "Caption";

process->setStandardOutputFile("process.txt");
process->start(program,arguments);

QByteArray result = process->readAll();
Run Code Online (Sandbox Code Playgroud)

我宁愿不创建process.txt并将所有输出都带到变量......

windows qt qprocess

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

QProcess :: start和QProcess :: startDetached有什么区别?

Qt文档给出了这样的解释:

  • QProcess::start:

    如果没有运行,则在新进程中启动给定程序,在参数中传递命令行参数.

  • QProcess::startDetached:

    在新进程中使用参数参数启动程序程序,并从中分离.

两者有什么区别?唯一的区别是你只能使用一个程序的一个实例启动QProcess::start而且许多实例使用QProcess::startDetached

c++ qt qprocess

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

如何在Qt中执行复杂的linux命令?

我想通过在linux中运行命令来重启计算机QProcess.我在我的应用程序中对我的root密码进行了硬编码.

当我在终端中运行以下内容时,它可以完美运行:

echo myPass | sudo -S shutdown -r now 
Run Code Online (Sandbox Code Playgroud)

当我将命令放在shell脚本中并通过QProcess它调用它也是成功的:

QProcess process;
process.startDetached("/bin/sh", QStringList()<< "myScript.sh");
Run Code Online (Sandbox Code Playgroud)

但我无法通过直接传递到QProcess:

process.startDetached("echo myPass | sudo -S shutdown -r now ");
Run Code Online (Sandbox Code Playgroud)

它只会打印 myPass | sudo -S shutdown -r now

如何直接使用这些相对复杂的命令QProcess.(没有放入shell脚本).

c++ linux shell qt qprocess

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

如何在Qt程序中嵌入二进制可执行文件(在运行时执行)?

我正在使用Qt编写一个跨平台的C++程序,我想在程序中打包/嵌入一些二进制可执行文件.该程序应该能够在运行时执行这些二进制文件.

我想,我需要使用start()和":/ ..."表示法的QResource和QProcess,但我似乎没有让进程运行.有什么我想念的吗?它应该像这样工作吗?二进制文件是否需要设置为可执行文件?

背景:我正在编写一个使用Git的工具,我不想让最终用户手动安装Git.

(在Mac OS X上尝试这个,BTW.)

更新:

我使用以下代码(C++,Mac OS X上的Qt):

QString program = ":/git";
QStringList arguments;
arguments << "help" << "commit";
myProcess->start(program, arguments);
Run Code Online (Sandbox Code Playgroud)

Git可执行文件位于项目路径中,我的resources.qrc引用它,如下所示:

<qresource prefix="/">
    <file>git</file>
</qresource>
Run Code Online (Sandbox Code Playgroud)

我没有收到错误,但程序没有执行.当我设置program为不存在的文件时,行为是相同的.":/git"用绝对路径替换git非常有效.

qt qprocess

7
推荐指数
2
解决办法
2349
查看次数

使用包含空格的参数调用Qprocess - Windows

我试图调用一个可执行文件qprocess并传递一些可能(并且很可能会)包含空格(不是全部)的参数.可执行文件是python已打包的脚本Py2exe.该python脚本用于optparse解析参数.

如果我py2exe.execmd.exe通话中打电话是这样的:

pythonExecutable.exe -aarg_a -barg_b -c"path with spaces" -darg_d
Run Code Online (Sandbox Code Playgroud)

像这样的电话会成功.

我希望通过一个Qt应用程序使用Qprocess,但我找不到一种方法来做这个,因为Qprocess将删除任何引号("")在空格出现的地方留下参数.

我似乎错过了什么,有人可以帮助解决这个问题吗?

windows qt qprocess

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

标签 统计

qprocess ×10

qt ×10

c++ ×5

process ×2

shell ×2

stdout ×2

windows ×2

chain ×1

directory ×1

linux ×1

qstring ×1

qt-creator ×1

qt4 ×1