问题标签 [qprocess]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2165 浏览

multithreading - QProcess, QEventLoop - 可用于并行处理

我想知道是否可以使用 QEventLoop (QProcess?) 来并行化对 Qt 同一函数的多个调用。QtConcurrent 或 QThread 究竟有什么区别?更准确地说,什么是流程和事件循环?我读到 QCoreApplication 必须在 main() 方法中尽早 exec() ,所以我想知道为什么它与主线程不同。

您能否指出对 Qt 进程和线程的一些有效参考?我是通过官方文档来的,这些事情仍然不清楚。

谢谢并恭祝安康。

0 投票
1 回答
12010 浏览

qt - 在 textBrowser 中实时显示 QProcess 输出

我是 qt 开发的新手,我想将 QProcess 的输出实时传输到 textBrowser。我从执行一个简单的 echo 命令开始,但没有显示程序的输出。我究竟做错了什么????

PS我在一台linux机器上。

编辑:我仍然无法在 textBrowser 中获得输出。

我更改了 Qprocess 参数并尝试了 waitForStarted() 和 waitForReadyRead() ,以便进程及时启动并且结果可用。

我添加了 waitForFinished() 以便进程在超出范围时不会终止。

0 投票
0 回答
575 浏览

linux - 使用 Qt 检查可用的文件句柄以避免 SIGBUS 错误

我在多线程 Qt 控制台应用程序中使用 QProcess。在运行时我得到了大约 250 个连接线程,每个连接线程都使用一个 DB 连接并使用 QProcess 对象执行一个 shell 命令。

我的ulimit -n节目 1024(=管道或文件句柄可用)。我想我在这里达到了极限,改变它只会推迟问题。我需要对此进行适当的错误处理(而不是 SIGBUS 崩溃)。在开始 QProcess 之前,如何检查可用的管道号?

非常感谢您的任何提示。

尖刺

来自 Qt 来源的 qprocess_unix.cpp 引用的代码:

代码在该行崩溃FD_SET(childStartedPipe[0], &fds);

...

这是调用 QProcess 的函数:

0 投票
1 回答
3519 浏览

c++ - Qt:无法使用 QProcess 启动 Windows 控制台

QProcess 根本不显示黑色控制台窗口。

这是我使用的代码:

将 cmd.exe 替换为 calc.exe 会成功启动计算器。

0 投票
2 回答
2918 浏览

qt - Qt的QProcess在退出后仍然认为进程正在运行

我正在使用 QProcess 从libs3运行 s3 程序。

但是,每次我运行此代码时,waitForFinished 方法都会等待整整 30 秒,然后我得到以下输出:

我可以看到在 waitForFinished 超时之前,S3 进程显然没有在 Activity Monitor.app 中运行。这是怎么回事?

0 投票
1 回答
2534 浏览

c++ - 当路径中有空格时,从与 Qt 应用程序相同的目录启动可执行文件

我想在我的 Qt 应用程序中按下按钮时启动一个可执行文件。它.exe始终与 Qt 应用程序本身位于同一目录中。

有时此目录的路径中有空格。这似乎阻止了.exe启动。

这是我的代码(似乎不起作用):

我不知道是否可以在.exe不先显示命令提示符的情况下启动。当.exe运行时,我必须关闭 Qt 应用程序,同时.exe继续运行。

0 投票
2 回答
2409 浏览

python - 如何在 PySide 中获取 QProcess 运行的命令的输出?

我想知道如何在 PySide 中捕获 QProcess 运行的命令的输出,以便显示它。

0 投票
1 回答
290 浏览

python - 无法在python中使用QProcess获取文件输出

我需要: 1. 在日志文件中捕获进程的输出,但是 2. 将其分离,因为该程序可能需要数小时(或数天)。

显然,如果你使用 QProcess.startDetached(command),你会丢失你的 StandardOutput,所以

不起作用。

确实有效,但我负担不起捆绑费用。还

不起作用。它将“> logfile”视为“my_command”的非法选项

这是在 Linux 上


问题是当调用程序关闭时“my_command”会死掉。nohup 似乎没有帮助。(不知道为什么)。

0 投票
2 回答
641 浏览

c++ - 在主程序和 QProcess 之间同步输出?

我正在构建一个程序来执行一些用户测试,并且需要以非常小的间隔(每 10 毫秒)记录他们正在做什么的数据。大部分数据都可以从 QT 中找到,但不幸的是我需要使用单独的程序来计算鼠标移动(即使鼠标已经碰到屏幕边缘,我也需要获取移动,但 QT 只是忽略了屏幕外移动)。

因此,我构建了一个处理低级鼠标输入并输出检测到的坐标变化的 Windows 程序。然而,问题是我无法从 Windows 程序中获取数据以与主程序的输出保持一致。

在我的主程序中,我使用以下代码。

readMouseData 函数看起来像这样。

其中一些东西可能是不必要的。我添加了“MergedChannels”模式和“DirectConnection”位以尝试解决问题。

我得到的结果是,windows 程序的输出每 100 毫秒左右以大块的形式出现,而不是在它发生时立即插入到文件流中。似乎某处有一个缓冲区需要填充,或者在处理 readyRead() 信号之前存在延迟。有人对我如何实时获取主程序和 QProcess 的输出有任何建议吗?(嗯,至少延迟小于 10 毫秒)。

此外,如果它很重要,我正在运行 Windows 7 并使用 MinGW 编译主程序,使用 Visual Studio 2008 编译检测鼠标移动的 Windows 程序。windows中的输出如下所示:

让我知道是否需要更多信息。

谢谢,-基兰

0 投票
1 回答
2339 浏览

c++ - QProcess::terminate() 不适用于简单的 Qt 应用程序作为 Windows XP 下的子进程

首先,我将从 QProcess 对象开始的简单 Qt 应用程序:

现在,带有 QProcess 对象的 Qt 应用程序:

行为:terminate() 导致子进程的窗口消失(并从 XP 任务栏中),但根据 taskman,该进程仍在运行。由于while (!process.waitForFinished(500))QProcess 对象从不发出finished(),所以循环永远存在。令人惊讶的是,我从子进程(它只打印QProcess::readAllStandard...()调用的空字符串)中没有得到任何关于 stdin 或 stderr 的信息,这看起来很奇怪,因为子进程的顶部窗口关闭让我认为 closeEvent() 在子进程中被调用。

使用 QProcess::kill() 终止子进程是可行的,但我不想使用它,因为它不会让子进程有机会在退出之前进行清理。

有趣的是,同样的代码在 Qt 4.7.4 和 OS X 10.6.x 下可以正常工作 - terminate() 导致子进程干净地退出,所以我不确定在 XP 下我做错了什么。谢谢。