python - 在 Linux 中使用 system() 调用从 C 调用 Python

标签 python c

我在 Linux 机器内使用 system() 调用从 C 代码调用 Python 程序。 假设第一次调用 Python 程序通过打开文本文件并读取第 1-10 行来读取某个文本文件的前 10 行。现在在第二次调用 Python 程序期间,我想读取接下来的 10 行 11-上次调用 Python 期间打开的相同文本文件的 20 个,无需重新打开文件并从文件的第一行开始。在第三次调用 Python 程序期间,我希望能够在不重新打开文件并从文件开头开始的情况下读取同一文本文件的接下来 10 行 21 - 30。这继续......

这是示例代码

//This is C code
...
...
int initial_line_number, final_line_number
initial_line_number = 1;
final_line_number = 10;
for(i = 1; i <= 10; i++)
{
    system("python test.py initial_line_number, final_line_number"); //test.py reads a text     file from initial_line number to final_line_number
    initial_line_number += 10;
    final_line_number +=10;
}

这能做到吗?最优雅的方法是什么?

最佳答案

不,您不能在不重新打开文件的情况下继续第二个调用。

每个 system() 调用都会运行作为参数给定的程序,并等待该进程结束。因此,您每次都会得到一个新的 child ——没有(简单的)方法可以让第二个 child 从第一个 child 停止的地方继续。

(可能有复杂的方法,您的第一个进程在后台启动一个 Python 进程,该进程读取一些行并挂起;您直接启动的进程将终止。第二个调用可能会识别出 Python 进程仍在挂起并告诉它继续。但这是一个棘手的编程 - 不值得付出努力。而且每个 system() 调用都将运行一个单独的进程并等待该进程结束,这仍然是事实。)

关于python - 在 Linux 中使用 system() 调用从 C 调用 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16197453/

相关文章:

python - 通用外键或外键

c - 来自 int 的基本 C 强制转换警告指针

c - 如何将一维矩阵拆分为 4 个一维子矩阵?

c - 未声明变量的操纵杆代码错误

c - Turbo C 3.0 DOS 框中程序异常终止

python - 在计数图上绘制折线图,​​右侧有单独的 y 轴

python - Flask-Security user_registered 信号在 Python 3.3 中未收到,但在 2.7 中有效

python - 在两个二维数组中查找匹配行的索引

python - 更正 css.map 文件的 MIME 类型

c - 我如何知道可执行文件中有哪些功能?