【问题标题】:Getting linux terminal value from my application从我的应用程序中获取 linux 终端值
【发布时间】:2012-02-14 11:53:49
【问题描述】:

我正在 Linux 中开发 Qt 应用程序。我想将 Linux 命令传递给终端。这行得通,但现在我也想从终端获得此特定命令的响应。

例如,

ls -a

如您所知,此命令列出当前工作目录的目录和文件。我现在想将 ls 调用的返回值传递给我的应用程序。这样做的正确方法是什么?

【问题讨论】:

  • 您可以在QProcesshere找到工作示例。

标签: linux qt qt4


【解决方案1】:

QProcess 是 qt 类,它可以让你生成一个进程并读取结果。有一个在该页面上读取命令结果的用法示例。

【讨论】:

  • 我要补充一点,相关部分是“通过渠道沟通”
  • 我已经尝试过,但我无法完成。 QString 程序 = "ls -a"; QStringList 参数;参数 开始(程序,参数); QByteArray 结果 = myProcess->readAllStandardOutput ();
  • 你的程序名有误; ls -a 在我见过的任何 Linux 系统上都不存在。程序是ls-a是一个参数。
  • 我知道哪个是参数或哪个是命令 =) 我通过添加“waitForFinished();”解决了我的问题在“myProcess->readAllStandardOutput();”之前
【解决方案2】:

popen(),linux systerm的api,返回FILE *,你可以像文件描述符一样读取它,也许对你有帮助。

【讨论】:

  • qt 可能和 popen() 有相同的函数 api
【解决方案3】:

解析ls(1) 输出是危险的——在目录中创建一些具有有趣名称的文件并进行测试:

touch "one file"
touch "`printf "\x0a\x0a\x0ahello\x0a  world"`"

这会在当前工作目录中创建 两个 文件。我希望您解析ls(1) 输出的尝试不会奏效。如果您将结果显示给人类,这可能没问题,(尽管如果文件名包含看起来像ls(1) 输出的输出,人类会非常困惑!)但是如果你是试图在文件系统中呈现类似explorer.exeFinder.app 表示文件的东西,这是严重损坏

改为使用opendir(3)readdir(3)closedir(3) 自行读取目录条目。这将更安全、更便携,并且(作为附带好处)性能稍好。

【讨论】:

    猜你喜欢
    • 2012-06-13
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    相关资源
    最近更新 更多