2 votos

¿Por qué readline.read_history_file de Python no funciona desde un script, sino que funciona de forma interactiva?

He preguntado en Stack Overflow, pero parece un problema específico de Mac OS X, ya que el error no se produce en otros sistemas operativos (ubuntu, por ejemplo).

https://stackoverflow.com/q/42637680/447830 repetido a continuación:

Por lo tanto, tengo el archivo llamado ~/.osc_history, como se muestra a continuación:

$ 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

La cabecera del archivo es correcta:

$ cat ~/.osc_history 
_HiStOrY_V2_

Desde el prompt interactivo, el siguiente código se ejecuta bien:

$ 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

Sin embargo, cuando intento ejecutar lo siguiente, que he llamado "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)

...ya veo:

$ 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

¿Qué diablos está pasando? (Espero no estar pasando por alto alguna estúpida errata varias veces y no ser lo suficientemente experto en código readline como para detectar el error yo mismo).

0voto

John A Puntos 11

No sé si lo has solucionado. Me acabo de encontrar con esto. Puedo evitarlo haciendo visible el archivo de historia de Python.

ej.: > cp .pyhistory -> pyhistory > cp .pyhistory -> pyhistory

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X