我对它使用了Qt和tcsh,需要执行如下内容:
tcsh: pwd & ls在Qt中:
QString cmd = "pwd & ls";
QProcess *process = new QProcess;
process->start(cmd);
process->waitForBytesWritten();
process->waitForFinished();
qDebug() << process->readAll();`问题出现在符号("&")中,进程没有返回任何内容。
发布于 2016-11-09 07:49:50
首先,让我们了解执行单个命令(如pwd )时会发生什么。当您这样做时,shell进程叉子 (即生成子进程),然后子进程转成 pwd进程并获得对终端的控制。
接下来,如果执行pwd &,也会发生同样的情况,但是子进程(在我们的示例中是pwd)无法控制终端。它作为后台进程运行,而shell继续与终端一起工作。例如,您可以运行一个GUI程序(firefox &),并且shell将准备好立即运行下一个程序。
最后,当您执行pwd & ls时,与前面的情况一样,但是shell再次分叉,并在前台运行ls。正如您可能猜到的那样,pwd & ls &生成在后台运行的两个进程,您可以一次执行任意多个命令。
现在让我们回到Qt。在运行命令之前,QProcess不运行任何shell。因此,当您通过pwd & ls通过QProcess运行时,pwd将是唯一执行的程序,但它只执行两个命令行参数:&和ls。他们两个都会被忽视。
因此,相当于pwd & ls的是两个QProcess对象,每个对象运行一个命令。
另一种解决方案是显式地运行shell以使参数被解析:
QString cmd = "tcsh -c \"pwd & ls\"";
QProcess *process = new QProcess;
process->start(cmd);
process->waitForBytesWritten();
process->waitForFinished();
qDebug() << process->readAll();https://stackoverflow.com/questions/40500718
复制相似问题