【问题标题】:Read script output variable读取脚本输出变量
【发布时间】:2019-02-17 11:14:23
【问题描述】:

我正在尝试返回一个 shell 脚本的值。从我读过的内容来看,我可以使用 popen,但由于某种原因,我无法让代码正常工作。现在,当我运行代码时,我得到的是乱码,而不是我想要的浮点数。

shell 脚本中的值是一个浮点数。

我想返回一个 bash 脚本的值,这样我就可以使用从 shell 脚本返回的值作为我的 C 代码的变量。

#include <stdio.h>

//Settings Variables
 float upload_speed;
 float download_speed;

int main(int argc, char **argv)
{

    FILE *upload_speed;

    //Runs shell script on code and returns data
    upload_speed = popen("./Filter_Data.sh Upload", "r");
    printf("return value is: %s", upload_speed);
    return 0;
}

【问题讨论】:

  • 请发布minimal reproducible example,包括您预期会发生的事情以及实际发生的事情。
  • @melpomene 这是 C 部分的代码。
  • 为什么要加入&lt;mysql/mysql.h&gt;?为什么你有全局变量(未使用)?你有没有用 C 语言处理过文件(例如使用fopenfreadfgets 等)?
  • 您使用什么编译器选项?如果你使用 gcc,你至少应该有gcc -Wall -Wextra -pedantic -O2
  • @melpomene,稍后在代码中,将值方式添加到表中。我暂时省略了该代码。我正在使用 geany,并且我的代码符合要求。

标签: c popen


【解决方案1】:

popen 函数返回一个指向 FILE 对象的指针,该对象表示已执行程序的输入和输出。您将其视为不是字符串(即char *)。

您需要从文件对象中读取以获取其输出:

FILE *outputFile;
char outputStr[80];

outputFile = popen("./Filter_Data.sh Upload", "r");
if (outputFile) {
  fgets(outputStr, sizeof(outputStr), outputFile);
  printf("output is: %s", outputStr);
  pclose(outputFile);
}

【讨论】:

  • 我看到它返回第一行,有没有办法让它返回 shell 脚本的最后一晚结果?谢谢你
  • 需要使用pclose(),而不是fclose()
  • @Vlad 知道脚本输出什么,您需要阅读多行并解析它们以获得您想要的信息。
  • @Shawn 很好。固定。
  • @dbush 我将如何解析它们?抱歉,在我使用 C 的所有时间里,我从未真正与 fgets 进行过互动
猜你喜欢
  • 2019-01-25
  • 2022-08-19
  • 1970-01-01
  • 1970-01-01
  • 2011-12-16
  • 1970-01-01
  • 2017-09-03
  • 2019-03-18
  • 2015-05-30
相关资源
最近更新 更多