TypeError: '_io.TextIOWrapper' object cannot be interpreted as an integer
fekir opened this issue · comments
On Windows 10, x64, Python 3.10.0 (downloaded from official python website, not from the store or cygwin version) and install iniparse with pip.
Download https://github.com/pixelb/crudini/releases/download/0.9.3/crudini-0.9.3.tar.gz and extract
Sanity check: python crudini --version
reports crudini 0.9.3
Create file.ini with content
[section1]
param1 = value1
(not: empty file is fine too)
python crudini --get file.ini section1 parameter1
Traceback (most recent call last):
File "C:\Users\admin\Desktop\crudini-0.9.3\crudini", line 979, in <module>
sys.exit(main())
File "C:\Users\admin\Desktop\crudini-0.9.3\crudini", line 975, in main
return crudini.run()
File "C:\Users\admin\Desktop\crudini-0.9.3\crudini", line 868, in run
self.conf = self.parse_file(self.cfgfile,
File "C:\Users\admin\Desktop\crudini-0.9.3\crudini", line 647, in parse_file
self.locked_file = LockedFile(filename, self.mode, self.inplace,
File "C:\Users\admin\Desktop\crudini-0.9.3\crudini", line 165, in __init__
self.lock()
File "C:\Users\admin\Desktop\crudini-0.9.3\crudini", line 96, in lock
msvcrt.locking(self.fp, msvcrt.LK_LOCK, 1)
TypeError: '_io.TextIOWrapper' object cannot be interpreted as an integer
or
python crudini --set file.ini section parameter value
Traceback (most recent call last):
File "C:\Users\admin\Desktop\crudini-0.9.3\crudini", line 979, in <module>
sys.exit(main())
File "C:\Users\admin\Desktop\crudini-0.9.3\crudini", line 975, in main
return crudini.run()
File "C:\Users\admin\Desktop\crudini-0.9.3\crudini", line 868, in run
self.conf = self.parse_file(self.cfgfile,
File "C:\Users\admin\Desktop\crudini-0.9.3\crudini", line 647, in parse_file
self.locked_file = LockedFile(filename, self.mode, self.inplace,
File "C:\Users\admin\Desktop\crudini-0.9.3\crudini", line 165, in __init__
self.lock()
File "C:\Users\admin\Desktop\crudini-0.9.3\crudini", line 96, in lock
msvcrt.locking(self.fp, msvcrt.LK_LOCK, 1)
TypeError: '_io.TextIOWrapper' object cannot be interpreted as an integer
Error does not depend on shell (reproducible from cmd, powershell, git-bash, ...).
I noticed only afterwards that #68, #26 and #35 already reports that crudini on Windows does not work.
A workaround is to remove the lock logic, everything seems otherwise to work fine.
Maybe it could be a short-term solution for supporting windows out-of-the-box?
Otherwise consider what I've written in #86, it might also be a long-term solution.
For the record, it is possible to reproduce the issue on GNU/Linux thanks to wine:
- install wine with package manager (I've used
wine-5.0.3 (Debian 5.0.3-3)
) - download python 3.10 from official python website
- use
winecfg
to set the windows version to "Windows 10" (latest python version supports only Windows >=8) wine python-3.10.0-amd64.exe
to install python (for simplicity add it to the PATH during installation, not necessary)wine python.exe -m pip install iniparse
- download https://github.com/pixelb/crudini/releases/download/0.9.3/crudini-0.9.3.tar.gz and extract
wine python.exe Downloads/crudini-0.9.3/crudini --set file.ini section parameter value
Traceback (most recent call last):
File "Downloads\crudini-0.9.3\crudini", line 979, in <module>
sys.exit(main())
File "Downloads\crudini-0.9.3\crudini", line 975, in main
return crudini.run()
File "Downloads\crudini-0.9.3\crudini", line 868, in run
self.conf = self.parse_file(self.cfgfile,
File "Downloads\crudini-0.9.3\crudini", line 647, in parse_file
self.locked_file = LockedFile(filename, self.mode, self.inplace,
File "Downloads\crudini-0.9.3\crudini", line 165, in __init__
self.lock()
File "Downloads\crudini-0.9.3\crudini", line 96, in lock
msvcrt.locking(self.fp, msvcrt.LK_LOCK, 1)
TypeError: '_io.TextIOWrapper' object cannot be interpreted as an integer
Oh the wine suggestion is excellent, thanks!
Addressed in commit 0f2c0b0