Estoy intentando ejecutar un script de Linux a través del módulo de subproceso de Python. A continuación se muestra el comando de subproceso:
result = subprocess.run(['/dir/scripts/0_texts.sh'], shell=True) print(result) Aquí está el archivo de script 0_texts.sh :
cd /dir/TXTs pylanguagetool text_0.txt > comments_0.txt El comando subprocess ejecuta el archivo de script, escribiendo un nuevo comments_0.txt en el directorio correcto. Sin embargo, hay un error en la ejecución. comments_0.txt contiene un error de "se requiere archivo de entrada", y el resultado del subproceso devuelve returncode=2 . Cuando ejecuto pylanguagetool text_0.txt > comments_0.txt directamente en la terminal, el comando se ejecuta correctamente, con comments_0.txt escrito con el archivo de entrada adecuado de text_0.txt .
¿Alguna sugerencia sobre lo que me estoy perdiendo?
Existe cierta ambigüedad aquí, ya que no es obvio qué shell se ejecuta cada vez que se invoca 0_texts.sh , y si tiene los valores que espera de las variables de entorno como PATH , lo que podría resultar en una copia diferente de pylanguagetool ejecutándose desde cuando llama en la línea de comando.
Primero, sugeriría eliminar la opción shell=True en subprocess.run , que solo involucra otro shell potencialmente diferente aquí. A continuación, cambiaría subprocess.run(['/dir/scripts/0_texts.sh']) a subprocess.run(['bash', '/dir/scripts/0_texts.sh']) (o el shell que quisiera run, probablemente bash o dash ) para eliminar esa fuente de ambigüedad. Finalmente, puede intentar usar el type pylanguagetool en el script, invocar pylanguagetool con su ruta completa o llamar a bash /dir/scripts/0_texts.sh desde su terminal para depurar aún más la situación.
Un problema más amplio es que pyLanguageTool es una biblioteca de Python, por lo que es casi seguro que será mejor llamar a sus funciones directamente desde su secuencia de comandos de Python original en lugar de usar una secuencia de comandos de Shell como intermediario.