2013-01-13 114 views
0

我在我的C程序中使用嵌入式Python。 python腳本從在線源獲取文件並返回它收到的數據。嵌入式Python值衝突

我的程序的C部分,即envolves這個特定的腳本如下:

char* Drop::getFile(std::string path){ 
    PyObject *pValue; 
    char* fileData = NULL; 
    pFunc = PyObject_GetAttrString(pModule,"getFile"); 
    pArgs = PyTuple_New(1); 
    PyTuple_SetItem(pArgs,0,PyString_FromString(path.c_str())); 
    pValue = PyObject_CallObject(pFunc,pArgs); 
    fileData = PyString_AsString(pValue); 
    Py_DECREF(pFunc); 
    Py_DECREF(pArgs); 
    return fileData; 
} 

FILEDATA確實得到一個值,但數據它指向的不匹配什麼python腳本從拉網。我正在上進行測試,這是一個PDF文件

%PDF-1.4%âãÏÓ 194 0 OBJ <> endobj
外部參照 0000000016 00000ñ 0000001374 00000ñ 0000001521 00000ñ 0000001915 00000ñ 0000002047 00000ñ 0000002547 00000ñ 0000002661 00000ñ 0000002773 00000ñ 0000002800 00000ñ 0000003401 00000ñ 0000003656 00000ñ 0000004166 00000Ñ 0000005703 00000Ñ 0000006124 00000Ñ 0000006373 00000Ñ 0000006828 00000Ñ 0000006898 00000Ñ 0000007022 00000Ñ 0000031268 00000Ñ 0000031531 00000Ñ 0000032131 00000Ñ 0000056344 00000Ñ 0000079808 00000Ñ 0000080674 00000ñ 0000085029 00000ñ 0000085946 00000ñ 0000001196 00000ñ 0000000873 00000ñ 拖車 <> < 6F4E88EE2CFAE8419CCB5AF471C4A 73F>] /後退241987/1196 XRefStm >> startxref %% EOF

221 0 OBJ <>流 hÞb`bYÇÀÆÀÀÆÈ

但實際的文件是要長得多。我在爲什麼要裁減數據而迷失了方向。

+0

你爲什麼認爲內容在那裏結束? –

+0

@Ignacio Vazquez-Abrams因爲我把它寫到一個文件中,並用文本編輯器打開它,這就是它的全部。我也無法用我的PDF查看器打開它。把它寫出來在python作品中的文件。 – HadADat

+0

你如何將它寫入文件? –

回答

0

您需要使用PyString_AsStringAndSize並使用文件的長度以及返回的字節。如果將返回的字節視爲一個c字符串,則會將第一個0字節解釋爲字符串的結尾。由於這個原因,在C中使用二進制數據的字符串函數時一般要小心。

+0

'PyString_FromString()'只用於傳遞一個參數到一個Python函數。參數(大概是給出變量名稱的路徑)不應包含任何NUL。 –

+0

是的,這是翻譯 - 他將解釋返回的字節作爲C字符串。 –

+0

謝謝你解決我的問題 – HadADat