2013-04-24 75 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()調用都會​​運行一個單獨的進程並等待該進程死亡,這仍然是事實。)