在 pythran 中写入文本文件失败
write text files in pythran fails
我正在使用 pythran,一个 Python 到 c++ 的编译器 http://pythran.readthedocs.io/
在其手册页中,pythran says it supports the method write
from TextIOWrapper
但是,尝试编译这个简单的文件
文件:mylib.py
#pythran export write_test(str,bool)
#pythran export fake_write(str)
def write_test(fname,r):
if r:
print('writing %s'%fname)
f = open(fname,'w')
#write_line = f.writelines
write_line = f.write
else:
print('NO FILE WILL BE WRITTEN')
write_line = fake_write
for i in range(10):
write_line(str(i) + '\n')
if r:
f.close()
def fake_write(s):
return 0
使用命令行
pythran mylib.py -o mylib.so -O3 -march=native -v
失败并显示消息:
mylib.py:9:21 error: Unsupported attribute 'write' for this object
Pythran 版本:0.9.8.post2
Python版本:3.8.5
使用 Ubuntu 20.04.1 LTS
当前版本的pythran好像有bug。它在 pythran (0.9.9.dev) 的开发版本中被修复。
不使用指向 f.write
函数的指针,我们可以定义一个没有 return 的 lambda
来完成工作并解决问题:
#pythran export write_test(str,bool)
#pythran export fake_write(str)
def write_test(fname,r):
if r:
print('writing %s'%fname)
f = open(fname,'w')
#write_line = f.writelines
write_line = lambda s: f.write(s)
else:
print('NO FILE WILL BE WRITTEN')
write_line = fake_write
for i in range(10):
write_line(str(i) + '\n')
if r:
f.close()
def fake_write(s):
return None
开发人员在 github bug report page.
中建议进行此修改
我正在使用 pythran,一个 Python 到 c++ 的编译器 http://pythran.readthedocs.io/
在其手册页中,pythran says it supports the method write
from TextIOWrapper
但是,尝试编译这个简单的文件
文件:mylib.py
#pythran export write_test(str,bool)
#pythran export fake_write(str)
def write_test(fname,r):
if r:
print('writing %s'%fname)
f = open(fname,'w')
#write_line = f.writelines
write_line = f.write
else:
print('NO FILE WILL BE WRITTEN')
write_line = fake_write
for i in range(10):
write_line(str(i) + '\n')
if r:
f.close()
def fake_write(s):
return 0
使用命令行
pythran mylib.py -o mylib.so -O3 -march=native -v
失败并显示消息:
mylib.py:9:21 error: Unsupported attribute 'write' for this object
Pythran 版本:0.9.8.post2
Python版本:3.8.5
使用 Ubuntu 20.04.1 LTS
当前版本的pythran好像有bug。它在 pythran (0.9.9.dev) 的开发版本中被修复。
不使用指向 f.write
函数的指针,我们可以定义一个没有 return 的 lambda
来完成工作并解决问题:
#pythran export write_test(str,bool)
#pythran export fake_write(str)
def write_test(fname,r):
if r:
print('writing %s'%fname)
f = open(fname,'w')
#write_line = f.writelines
write_line = lambda s: f.write(s)
else:
print('NO FILE WILL BE WRITTEN')
write_line = fake_write
for i in range(10):
write_line(str(i) + '\n')
if r:
f.close()
def fake_write(s):
return None
开发人员在 github bug report page.
中建议进行此修改