2014-02-26 62 views
0

我遇到類似於here中使用問題中給出的答案的問題。 我在Windows 64位機器上使用Python 2.7,並使用默認使用Python的ctypes。給定代碼在上面的鏈接。無法通過python中的ctypes導入crt._sopen

pyfrom ctypes import * 
pycrt = cdll.msvcrt 
py_sopen = crt._sopen 
py_sopen.argtypes = (c_char_p, c_int, c_int, c_int) 
py_SH_DENYRW = 0x10 # from <share.h> 
pyh = _sopen("C:\\1.txt", 0, _SH_DENYRW, 0) 
print pyh 

pyfrom ctypes的導入* ^ 語法錯誤:無效的語法

如果我改變pyfrom ctypes的導入*從ctypes的導入*然後py_sopen = crt._sopen NameError:名稱'crt'未定義

回答

2

pyfrom ctypes import *不是有效的語法。它應該是from ctypes import *

誰給你的代碼弄亂了誰。從每個變量名稱開始刪除py,它至少運行,我不能告訴你它是否符合你的期望。

from ctypes import * 
crt = cdll.msvcrt 
_sopen = crt._sopen 
_sopen.argtypes = (c_char_p, c_int, c_int, c_int) 
_SH_DENYRW = 0x10 # from <share.h> 
h = _sopen("C:\\1.txt", 0, _SH_DENYRW, 0) 
print h 

測試功能:

filename = r"C:\python\test.txt" 

f = open(filename, 'w') 

from ctypes import * 
crt = cdll.msvcrt 
_sopen = crt._sopen 
_sopen.argtypes = (c_char_p, c_int, c_int, c_int) 
_SH_DENYRW = 0x10 # from <share.h> 
h = _sopen(filename, 0, _SH_DENYRW, 0) 
print h 

f.close() 

from ctypes import * 
crt = cdll.msvcrt 
_sopen = crt._sopen 
_sopen.argtypes = (c_char_p, c_int, c_int, c_int) 
_SH_DENYRW = 0x10 # from <share.h> 
h = _sopen(filename, 0, _SH_DENYRW, 0) 
print h 

輸出:

-1 
3 
+0

請參閱我看到了用鏈路 – imp

+0

,如果固定的語法錯誤不是你的問題,是什麼呢? – M4rtini

+0

我突出顯示了錯誤。我的原始問題與鏈接相同。所以,我認爲這個ctypes將解決這個問題。但那麼這個輸入錯誤 – imp