如何“使用…打开”终端程序?Qt Creator,Linux

如何“使用…打开”终端程序?Qt Creator,Linux

我创建了一个程序,作为某些文件类型的默认调用。我“用…打开[任何文件]” - 创建了文件“test.txt”,但我的程序无法进行 I/O。为了能够与我的程序通信,我为我的可执行文件创建了一个“终端中的应用程序”启动器(快捷方式、标签、桌面图标)。现在我“用…打开[任何文件]” - 没有创建文件“test.txt”。为什么?

#include <stdio.h>

char pcPW[1000];
FILE *fp;

int main()
{
    printf("Start.\n");

    fp = fopen("/home/kkk/build-ert-Desktop-Debug/test.txt", "w+");
    fprintf(fp, "Start.\n");
    fclose(fp);


    scanf("%s",pcPW);

    printf("pcPW:%s\n",pcPW);

    fp = fopen("/home/kkk/build-ert-Desktop-Debug/test.txt", "a+");
    fprintf(fp, "pcPW: \n%s\n", pcPW);
    fclose(fp);

    return 0;
}

截图:http://www.filedropper.com/downloads_87

答案1

您可以添加自定义脚本来执行您想要的操作,但需要记住一些棘手的事情:

  • 您的程序使用 C/C++ 编写。这意味着,程序必须先编译成二进制文件。根据程序是否使用任何特殊库,您可能需要从命令行执行此操作。gcc编译器默认创建a.out文件,该文件可以从终端运行(即已设置可执行权限)。简单的编译可以编写脚本,但对于更复杂的编译,您需要从终端执行此操作。

  • 运行打印到终端的程序首先需要有一个终端。因此,您需要先生成终端窗口,然后运行该程序。

以下是完成这个工作的脚本:

#!/usr/bin/env python
from os import path
from sys import argv
from subprocess import call

for item in argv[1:]:
    full_path = path.abspath('./' + item)
    try:
        call(['gcc',full_path])
    call(['gnome-terminal','-e', 
          "bash -c './a.out;read'"])
    except Exception as e:

将其另存为~/.local/share/nautilus/scripts/compile_and_run.py,确保它具有可执行权限,然后测试。

在此处输入图片描述

如果一切顺利,您将看到以下内容:

在此处输入图片描述

答案2

我创建了一个程序,该程序调用另一个程序,该程序又调用另一个程序。第一行的关键内容是:

 execl("/usr/bin/x-terminal-emulator", "/usr/bin/x-terminal-emulator",
        "-e", "/home/kkk/build-untitled-Desktop-Debug/untitled",
        "/home/kkk/Downloads/1.pdf", (char*) NULL);

谢谢 Serg,给了我很好的建议和 96% 的解决方案。

相关内容