Estoy tratando de encontrar todos los archivos .js en directorios y los doy como argumentos para python. Podría recopilar todos los archivos con .js usando el comando bash find . -name "*.js", pero no sé cómo dar esta información a Python. No quiero enviar el nombre del archivo uno por uno. Quiero enviar como lista el código de Python que sigue el manejo de argumentos.

import argparse

argparser = argparse.ArgumentParser("sh test")

argparser.add_argument("js_file", type=str, nargs ="+", help="js file names")

args = argparser.parse_args()
for file in args.js_file:
    # do something
2
taegyun kim 4 oct. 2019 a las 06:04

3 respuestas

La mejor respuesta

Puede usar subprocess.run desde un script de Python para hacer esto:

import subprocess
cmd  = 'find . -name "*.js"'

p = subprocess.run(cmd, shell=True, capture_output=True)
files = p.stdout.decode().split()
print(files)
0
Reinstate Monica 4 oct. 2019 a las 03:42

Si tiene GNU find, puede usar -exec + para llamar a un comando con todos los nombres de archivo coincidentes de una vez.

find . -name '*.js' -exec script.py {} +

Si no, puede obtener el mismo comportamiento con find | xargs.

find . -name '*.js' -print0 | xargs -0 script.py
0
John Kugelman 4 oct. 2019 a las 03:13

Dado que foo.py es su script de Python, puede usar esto:


python  foo.py `find . -name "*.js" | tr '\n' ' '`

0
Rasheed 4 oct. 2019 a las 04:06
58229389