如何使用 QProcess 运行 vim 终端

Posted

技术标签:

【中文标题】如何使用 QProcess 运行 vim 终端【英文标题】:How to run vim terminal with QProcess 【发布时间】:2016-11-16 11:10:07 【问题描述】:

我想做“vim”命令,“vim”命令用于在linux中打开一个新的编辑器。 "setup.csh" 用 QProcess 打开文件 "vi" 编辑器。我想使用 gui 运行这个命令。

linux终端命令:“vim /home/intern2/elif/Project/setup.csh”。我怎样才能运行这个命令gui

我在 Qt 中编写了以下命令,但使用 QProcess 无法正常工作。

QProcess *process1=new QProcess(this);
process1->start("vim" , QStringList() <<"/home/intern2/elif/Project/setup.csh");
process1->waitForBytesWritten();
process1->waitForFinished();
ui->textEdit_3->append(process1->readAllStandardOutput());

不幸的是,我给出了以下错误信息

错误信息:

Warning: Output is not a terminal
Warning: Input is not from a terminal

【问题讨论】:

你想打开一个新的终端窗口吗?如果是这样,您需要实际指定终端应用程序,如process1-&gt;start("xterm" , QStringList() &lt;&lt;"-e" &lt;&lt; "vim"&lt;&lt; "/home/intern2/elif/Project/setup.csh");。如果你想要文件内容,你应该改用cat(或者实际上你应该用QFile打开文件,在GUI后面打开shell程序应该小心处理),所以process1-&gt;start("cat" , QStringList() &lt;&lt;"/home/intern2/elif/Project/setup.csh"); 谢谢你,我按我的意愿工作了@PeterT 【参考方案1】:

我得到了它的工作:

QProcess* process = new QProcess();
qint64* processId = new qint64();
process->startDetached("/usr/bin/vim", QStringList(), QString(), processId);

// Wait for process to be closed by user (kill()
// does not actually kill the process, but tests if it exists)
while (kill(*processId, 0) == 0) 

// Done
delete processId;
delete process;

不要忘记为kill() 函数添加#include &lt;signal.h&gt;

【讨论】:

以上是关于如何使用 QProcess 运行 vim 终端的主要内容,如果未能解决你的问题,请参考以下文章

需要 virtenv 时如何运行 QProcess?

如何使用 QProcess 运行命令行?

如何使用 QProcess 同时运行多个 python 脚本

如何使用 QProcess 通过 Ping 检测“网络不可达”?

在 Qt QProcess 中运行 sudo 命令

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