标签: qprocess

使用QProcess启动流程

我正在尝试使用QProcess以下方式启动Microsoft Word :

QString program = "WINWORD.EXE";
process->start(program);
Run Code Online (Sandbox Code Playgroud)

但没有任何反应. winword.exe在路径上(所以当我输入winword.exe字时会打开).这是正确的方法吗?

qt qprocess

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

如何使用 QProcess 启动 Shell 脚本?

如何使用 QProcess 启动 Shell 脚本?Shell 脚本中有八个不同的命令,其中一些带有参数,另一些则没有。

我尝试使用(使用 Ubuntu 11.10)启动 Shell 脚本:

QProcess *Prozess = new QProcess();
Prozess->setWorkingDirectory(MainDirectory);
Prozess->start("/bin/sh", QStringList() << "Shell.sh");
Run Code Online (Sandbox Code Playgroud)

但这不起作用,这意味着什么也没有发生。如何使它工作?

c++ bash shell qt qprocess

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

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

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

python qt qprocess pyside python-3.x

5
推荐指数
1
解决办法
1850
查看次数

QProcess 和命令行“/c”参数

我对 QProcess 有一个非常奇怪的问题,它的行为很奇怪。

我最后想要得到的是这样的东西(这是Windows 7中的cmd.exe)

C:\path_to_somewhere>cmd /c "C:\Program Files\path_to_dir\executable"
Run Code Online (Sandbox Code Playgroud)

(cmd是为了兼容QProcess的显示)

所以为了做类似的事情,我创建了这个:

QProcess proc;
QString command;
QStringList attributes;

command = "c:\\windows\\system32\\cmd.exe";
QStringList << QString("/c \"C:\\Program Files\\path_to-dir\\executable"");
proc.start(command, attributes);
Run Code Online (Sandbox Code Playgroud)

我得到的错误输出是:

Name '\"c:\Program Files\Quantum GIS Wroclaw\bin\gdalwarp.exe\"' is not recognized as
internat or external command, executable or batch file.
Run Code Online (Sandbox Code Playgroud)

(它是我从波兰语翻译过来的,所以英语可能有点不同)。

似乎 \ 字符在字符串中没有转义,而将 \" 保留为命令中的字符。我做错了什么?

我已经尝试过

proces.start(QString) 
Run Code Online (Sandbox Code Playgroud)

函数与三重“\”\”,它也不起作用。我想这个问题的解决方案必须非常简单,我什至都没有想到它。

qstring escaping qprocess

5
推荐指数
1
解决办法
6004
查看次数

正确使用QProcess

  • 平台:Qt 4.8.2,Win 7

请考虑以下逻辑流程:

1. App started
2. functionA() triggered
3. the app periodically capture some images to external files
4. end of functionA()
5. the app create a video from captured images, using ffmpeg as external program
6. [step 2 -> step 5] may be repeated.
7. App quit
Run Code Online (Sandbox Code Playgroud)

为了实现这个流程,我使用QProcess启动外部程序让我加入图像,但是我对QProcess的正确使用模式感到困惑.(我不关心ffmpeg的控制台消息,我通过检查是否创建了视频文件来确定步骤5的成功.)

尝试1

void MyWidget::createAVI()
{
    checkAndDeleteAVI();
    process = new QProcess(this); // process_ defined as class member;
    process->start("ffmpeg -f images2 ....");
    process->waitForFinished(-1);  // (a)
    // (b)
}
Run Code Online (Sandbox Code Playgroud)

在(a),我读了这个调用可以冻结主GUI的文档,所以我应该从QThread/QRunnable调用吗?

在(b),我错过了什么吗?当我试图关闭应用程序时(流程中的第7步),应用程序崩溃了,我认为生成的QProcess没有正确发布.

尝试2

我编写了一个QProcess的包装类,如下所示: …

qt qprocess

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

将 QProcess 初始化为已经运行的进程

我想知道是否可以创建一个QProcess并将其初始化为已经在运行的进程?

我的应用程序启动另一个应用程序。所以如果我的应用程序异常关闭,当它重新启动时,我想附加另一个应用程序。

qt process qprocess

5
推荐指数
1
解决办法
2498
查看次数

QProcess无法执行外部可执行文件

我正在努力找到解决问题的方法,但我根本不知道如何解决它.

我正在为我制作的一些程序创建一个用户界面(所以你可以通过简单地按一个按钮启动一个可执行文件).所以我想到了使用qt.

所以我读了很多关于QProcess的内容并尝试使用它.

在我的第一个可执行文件中,我尝试通过QProcess :: start()启动它,但它没有工作,所以我尝试使用QProcess:execute():

QProcess *proc = new QProcess(this);
QDir::setCurrent("C:\\DIRTOTHEEXE\\");
QString program="HELLO.exe";
proc->execute(program);
Run Code Online (Sandbox Code Playgroud)

这完美地执行我的程序并且运行良好.

所以我试着用我的其他exe做同样的事,但它没有用

QProcess *myproc = new QProcess(this);
QDir::setCurrent("C:\\DIRTOTHEEXE\\");
QString program="HelloWorld.exe";
myproc->start(program);
Run Code Online (Sandbox Code Playgroud)

被调用的可执行文件只打印"Hello World"并返回0.

所以现在我的问题是:什么可能导致这种行为,为什么我不能使用QProcess :: start()作为第一个可执行文件?

顺便说一句:我也尝试将workingDirectory()设置为exe的路径,但也没有用.

希望可以有人帮帮我.

编辑:所以程序执行但在打印出一行后立即崩溃.

编辑:这里是HelloWorld来源.

#include <iostream>
using namespace std;

int main(int argc, char* argv[]) {
    cout<<"HELLO WORLD!!"<<endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

windows qt windows-xp qprocess

5
推荐指数
1
解决办法
6645
查看次数

如何在Qt中获取output system()命令?

我在Qt中使用system()命令.我希望获得输出并将其显示给用户.我的命令是:

system("echo '" + rootPass.toAscii() + "' | su - root -c 'yum -y install " + packageName.toAscii() + "'");
Run Code Online (Sandbox Code Playgroud)

此命令无法运行,当我在QProcess中(启动或执行功能)使用它,但如果我能在QProcess中运行此命令我可以用得到的输出QProcess::readAllStandardOutput()功能.

当我在系统命令中使用">"将输出保存在文件中时,我会在完全安装包时收到输出.像轰鸣声:

system("echo '" + rootPass.toAscii() + "' | su - root -c 'yum -y install " + packageName.toAscii() + "' > result.out");
Run Code Online (Sandbox Code Playgroud)

有什么想法用QProcess运行这个命令,或者在写入每一行时从system()命令获得输出.

qt system qprocess

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

如何正确使用QProcess写入?

我需要一个程序来与依赖输入和输出的子进程通信.问题是我显然无法QProcess正确使用.

进一步向下的代码应该创建一个QProcess,启动它并进入主while循环.在那里,它将子进程创建的所有输出打印到控制台,然后询问用户输入,然后通过输入传递给子进程write(...).

最初我遇到了两个问题:

  1. printf"子进程的s不能由父进程读取.
  2. scanf在子进程中没有收到通过发送的字符串write.

至于(1),我开始意识到这是由子进程'stdout的缓冲引起的问题.通过fflush(stdout)关于其冲洗行为的调用或操作可以容易地解决该问题.

第二个问题是我无法解决的问题.write被调用,甚至返回正确的发送字节数.但是,子进程不会继续执行,因为没有新数据写入其输出.本scanf似乎并没有被接收发送的数据.该程序给出的输出是:

Subprocess should have started.
124 bytes available!
Attempting to read:
Read: This is a simple demo application.
Read: It solely reads stdin and echoes its contents.
Read: Input exit to terminate.
Read: ---------
Awaiting user input: test
Written 5 bytes
No line to be read...
Awaiting user input: 
Run Code Online (Sandbox Code Playgroud)

我被严重困在这里.Google +沉重的想法让我失望了,我想把这个传递给你作为我最后的希望灯塔.如果我只是没有看到所有树木的森林,我的道歉.

如果需要这些信息:我正在使用Qt5和clang编译器处理64位MacOS X. 子进程代码在同一台机器上使用gcc编译.

非常感谢你提前,

NR

主代码:

int main() …
Run Code Online (Sandbox Code Playgroud)

c++ qt scanf qprocess

5
推荐指数
1
解决办法
5215
查看次数

使用Qt在GUI上按下按钮时启动shell脚本

我有一个shell脚本,当在触摸屏PC(Uubntu Lucid Lynx)上执行时,它会在远程服务器上进行备份.现在,我希望通过在其上运行的GUI应用程序中创建一个小Button来实现自动化.该应用程序使用Qt和C++构建.

到现在为止,我可以使用QFileDialog打开文件夹浏览器并导航到.sh文件,但是可以直接打开定义的.sh文件(即通过定义名称和位置)吗?

有一些提示应该使用QProcess,但我对它的实现感到困惑.提前致谢.

c++ linux shell qt qprocess

5
推荐指数
2
解决办法
6002
查看次数

标签 统计

qprocess ×10

qt ×9

c++ ×3

shell ×2

bash ×1

escaping ×1

linux ×1

process ×1

pyside ×1

python ×1

python-3.x ×1

qstring ×1

scanf ×1

system ×1

windows ×1

windows-xp ×1