Ho chiesto over Stack Overflow, ma questo sembra un problema specifico per Mac OS X poiché l'errore non si verifica su altri sistemi operativi (ad esempio ubuntu).
link ripetuto di seguito:
. Possiedo il file ~ / .osc_history, come mostrato di seguito:
$ w
17:53 up 3:15, 5 users, load averages: 1.30 1.17 1.10
USER TTY FROM LOGIN@ IDLE WHAT
kyma console - 14:39 3:14 -
kyma s001 - 17:20 - w
$ ls -l ~/.osc_history
-rw-r--r-- 1 kyma staff 13 Mar 6 17:41 /Users/kyma/.osc_history
$ ls -lO ~/.osc_history
-rw-r--r-- 1 kyma staff - 13 Mar 6 17:41 /Users/kyma/.osc_history
L'intestazione nel file è corretta:
$ cat ~/.osc_history
_HiStOrY_V2_
Dal prompt interattivo, il seguente codice funziona perfettamente:
$ python
Python 2.7.10 (default, Jul 30 2016, 19:40:32)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import os.path
>>> import readline
>>> histfile = os.path.join(os.path.expanduser("~"), ".osc_history")
>>> histfile
'/Users/kyma/.osc_history'
>>> readline.read_history_file(histfile)
>>> ^D
Tuttavia, quando tento di eseguire quanto segue, che ho chiamato "yeuch.py" ...
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import readline # Command line history
import os.path
histfile = os.path.join(os.path.expanduser("~"), ".osc_history")
if not os.path.isfile(histfile): # If there's no history file...
empty = open(histfile, "a") # ... create an ALMOST empty one...
empty.write("_HiStOrY_V2_\n") # ... with the special header line
empty.close()
readline.read_history_file(histfile) # Read history from previous sessions
readline.set_history_length(1000) # Default length was -1 (infinite)
... Vedo:
$ python yeuch.py
Traceback (most recent call last):
File "yeuch.py", line 14, in <module>
readline.read_history_file(histfile) # Read history from previous sessions
IOError: [Errno 1] Operation not permitted
Che diavolo sta succedendo? (Spero di non trascurare più volte uno stupido errore di battitura e di non essere un esperto di codice sufficiente per individuare l'errore da solo.)