pixelb / crudini

A utility for manipulating ini files

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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.exeto 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