簡體   English   中英

使用ctypes從python 2和3傳遞路徑到c ++

[英]pass a path from python 2 and 3 to c++ using ctypes

我需要使用ctypes從Python傳遞路徑到C ++庫。 如果我將路徑指定為

path = b"..\\xml_mapping_rule\\AixLib_Mapping_Rule.xml"

一切正常。 但是現在我必須創建這樣的路徑

path = os.path.join(rootPath, "\\AixLib_Mapping_Rule.xml")

它在Python 2上有效,但在Python 3上無效。如何將路徑轉換為字節數組(我相信這就是字符串前面的b的作用)?

我在SO上可以找到的最接近的問題是: 在Python中傳遞到Labview DLL的路徑

嘗試類似:

path = os.path.join(root_path, "AixLib_Mapping_Rule.xml")
return path.encode('utf-8') # or 'latin-1' or 'cp1252' 

在python 2中,字符串是字節序列,但是在python 3中,字符串是unicode代碼點序列。 “編碼”字符串是將代碼點轉換為字節序列的過程。

您必須通過編碼將Unicode字符串轉換為字節字符串,例如以下之一:

path = path.encode('ascii')
path = bytes(path, 'ascii')

如果要使用正確的編碼,請嘗試sys.getfilesystemencoding() ,如下所示:

import ctypes
import os
import sys

libc = ctypes.CDLL('libc.so.6')
fs_enc = sys.getfilesystemencoding()

rootPath = "/tmp"
path = os.path.join(rootPath, "AixLib_Mapping_Rule.xml")
path = path.encode(fs_enc)

fd = libc.open(path, 0, 0)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM