2013-04-24 99 views
2

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

下面是示例代码

//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; 
} 

可以这样做?什么是最优雅的方式来做到这一点?

回答

1

在理论层面上,可能想用python和c来探索使用DBus。 有一个python守护进程读取你的文件,然后从c进行一次dbus调用,返回x行数(你可以在dbus头文件中指定)。

这样,只要你愿意,你可以保持python文件打开,你不需要system()调用,这意味着你的程序会更安全。

(乌思可以从用户和系统权限运行,所以你的程序不必从一个管理员级别,只要你有这方面的权限运行。)

1

首先,您拨打system()是错误的,您必须传递一个字符串。

二,打电话system()不好,而且不便携。如果你真的想使用Python,你可以使用Python C API:http://docs.python.org/2/c-api/

+0

感谢linkdd。我修改了文字。它的模拟代码不是语法上正确的C代码。问题是你可以第二次调用python代码等等,而不必重新打开文件并从头开始 – user2065276 2013-04-24 16:58:29

2

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

每个system()调用将运行作为参数给出的程序,并将等待该进程死亡。因此,你每次都得到一个新的孩子 - 没有(简单)的方式让第二个孩子继续下去。 (可能有复杂的方法,其中第一个进程在后台启动一个Python进程,后者会读取一些行并挂起;直接启动的进程将终止;第二个调用可能会认识到Python进程仍在悬挂并且告诉它继续,但这是棘手的编程 - 不值得付出努力,而且每个system()调用都会​​运行一个单独的进程并等待该进程死亡,这仍然是事实。)