0 votos

Automator Shell Script solo se ejecuta en Mail y Terminal, pero en ningún otro lugar - "descriptor de archivo incorrecto"

Ejecutando Ventura 13.4 en Intel.

Escribí un script en Python que reemplaza el texto por la versión traducida. Se ve así:

    import openai
import sys

# Leer la clave de la API
openai.api_key = 'Aquí-está-mi-clave-de-API'

# Obtener el texto seleccionado
selected_text = sys.stdin.read()

# Llamar a la API de OpenAI para traducir el texto
modelo = "gpt-3.5-turbo"
idioma = "Alemán"
respuesta = openai.ChatCompletion.create(
    model=modelo,
    messages=[
        {
            "role": "user",
            "content": f"Traduce el siguiente texto al {idioma} sin cambiar el formato: {selected_text}",
        }
    ]
)

# Obtener la respuesta de la API y eliminar los saltos de línea iniciales/finales
texto_traducido = response["choices"][0]["message"]["content"].strip()

# Reemplazar el texto seleccionado con el texto traducido
sys.stdout.write(texto_traducido)

Funciona perfectamente en Automator, si lo pruebo. Se ejecuta según lo esperado, si lo ejecuto a través del servicio cuando estoy escribiendo un texto en Apple Mail. También funciona dentro de Terminal. Pero no puedo hacer que funcione en ningún otro programa (por ejemplo, TextEdit o Word) fuera de estos dos. Intenté dar acceso completo al disco a Automator. También intenté configurar mi Ruta en .zshenv:

¿El script de shell de Automator no conoce mi RUTA?

Sin embargo, si intento ejecutarlo en TextEdit siempre obtengo algo como esto:

La acción "Ejecutar script de shell" encontró un error: "Traceback (most
llamada reciente (última): Archivo
"/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/urllib3/connection.py",
línea 200, en _new_conn socket = connection.create_connection(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Archivo
"/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/urllib3/util/connection.py",
línea 85, en create_connection raise err Archivo
"/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/urllib3/util/connection.py",
línea 73, en create_connection socket.connect(sa) OSError: [Errno 9] Bad
descriptor de archivo

La excepción anterior fue la causa directa de la siguiente excepción:

llamada reciente (última): Archivo
"/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/urllib3/connectionpool.py",
línea 790, en urlopen respuesta = self._make_request(
^^^^^^^^^^^^^^^^^^^ Archivo
"/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/urllib3/connectionpool.py",
línea 491, en _make_request raise new_e Archivo
"/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/urllib3/connectionpool.py",
línea 467, en _make_request self._validate_conn(conn) Archivo
"/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/urllib3/connectionpool.py",
línea 1092, en _validate_conn conn.connect() Archivo
"/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/urllib3/connection.py",
línea 604, en connect self.socket = socket = self._new_conn()
^^^^^^^^^^^^^^^^ Archivo
"/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/urllib3/connection.py",
línea 215, en _new_conn raise NewConnectionError(
urllib3.exceptions.NewConnectionError:
: Error al
establecer una nueva conexión: [Errno 9] Bad
descriptor de archivo

También si intento ejecutar otro script usando zsh solo la situación es similar con este error:

La acción "Ejecutar script de shell" encontró un error: "gawk: /dev/fd/63:4045: fatal: no se puede abrir la tubería de doble vía `/inet/tcp/0/translate.googleapis.com/80' para entrada/salida: Descriptor de archivo incorrecto"

También intenté ejecutarlo a través de un script de Apple. Sin éxito. ¿Alguna recomendación de qué más podría intentar?

1voto

phillip Puntos 11

Así es como lo logré funcionar como se pretendía:

  1. Instalar Fastscripts

  2. Configurar un Applescript, que se ve así (¡reemplaza las rutas!):

    en ejecución

    • Copiar el texto seleccionado actualmente al portapapeles decir aplicación "Eventos del sistema" pulsación de tecla "c" usando {comando abajo} retraso 0.5 -- Esperar a que los datos estén disponibles finalizar decir

    • Obtener el texto seleccionado del portapapeles establecer texto seleccionado en (el portapapeles como texto)

    • Llamar al script de Python y pasar el texto seleccionado establecer texto traducido en hacer script de concha "echo " y formulario citado de texto seleccionado y " | /RUTA/A/TU/python3 /RUTA/A/MI/SCRIPT/DK_openAi.py"

    • Poner el texto traducido de nuevo en el portapapeles establecer el portapapeles en texto traducido

    • Pegar el texto traducido decir aplicación "Eventos del sistema" pulsación de tecla "v" usando {comando abajo} finalizar decir finalizar en

  3. Configurar DK_openAi.py que se ve así:

    importar openai importar sistema

    Leer la clave API

    openai.api_key = 'TU-CLAVE-API'

    Obtener el texto seleccionado

    texto_seleccionado = sistema.stdin.read().strip()

    Llamar a la API de OpenAI para traducir el texto

    modelo = "gpt-3.5-turbo" idioma = "Danés" respuesta = openai.ChatCompletion.create( modelo=modelo, mensajes=[ { "rol": "usuario", "contenido": f"Traduce el siguiente texto a {idioma} sin cambiar el formato: {texto_seleccionado}", } ] )

    Toma la respuesta de la API y la limpia de saltos de línea iniciales/finales

    texto_traducido = respuesta["choices"][0]["mensaje"]["contenido"].strip()

    Reemplazar el texto seleccionado con el texto traducido

    imprimir(texto_traducido, end="")

  4. Configura accesos directos para ejecutar los scripts de Apple a través de Fastscripts

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