我正在尝试使用QProcess
以下方式启动Microsoft Word :
QString program = "WINWORD.EXE";
process->start(program);
Run Code Online (Sandbox Code Playgroud)
但没有任何反应.
winword.exe
在路径上(所以当我输入winword.exe字时会打开).这是正确的方法吗?
如何使用 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)
但这不起作用,这意味着什么也没有发生。如何使它工作?
我想知道如何捕获PySide中QProcess运行的命令的输出,以便可以显示它.
我对 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)
函数与三重“\”\”,它也不起作用。我想这个问题的解决方案必须非常简单,我什至都没有想到它。
请考虑以下逻辑流程:
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的包装类,如下所示: …
我想知道是否可以创建一个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) 我在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()命令获得输出.
我需要一个程序来与依赖输入和输出的子进程通信.问题是我显然无法QProcess
正确使用.
进一步向下的代码应该创建一个QProcess,启动它并进入主while循环.在那里,它将子进程创建的所有输出打印到控制台,然后询问用户输入,然后通过输入传递给子进程write(...)
.
最初我遇到了两个问题:
printf
"子进程的s不能由父进程读取.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) 我有一个shell脚本,当在触摸屏PC(Uubntu Lucid Lynx)上执行时,它会在远程服务器上进行备份.现在,我希望通过在其上运行的GUI应用程序中创建一个小Button来实现自动化.该应用程序使用Qt和C++构建.
到现在为止,我可以使用QFileDialog
打开文件夹浏览器并导航到.sh文件,但是可以直接打开定义的.sh文件(即通过定义名称和位置)吗?
有一些提示应该使用QProcess,但我对它的实现感到困惑.提前致谢.