Как использовать результаты команды bash в качестве аргументов Python? - PullRequest
2 голосов
/ 04 октября 2019

Я пытаюсь найти все файлы .js в каталогах и приводит их в качестве аргументов для python. Я мог собрать все файлы с помощью .js, используя команду bash find . -name "*.js", но я не знаю, как передать эту информацию в python. Я не хочу отправлять имя файла по одному. Я хочу отправить в виде списка код Python, который обрабатывает аргументы.

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

Ответы [ 3 ]

0 голосов
/ 04 октября 2019

Вы можете использовать subprocess.run из скрипта Python, чтобы сделать это:

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

p = subprocess.run(cmd, shell=True, capture_output=True)
files = p.stdout.decode().split()
print(files)
0 голосов
/ 04 октября 2019

Учитывая, что foo.py - ваш скрипт на python, вы можете использовать это:


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

0 голосов
/ 04 октября 2019

Если у вас есть GNU, вы можете использовать -exec + для вызова команды со всеми совпадающими именами файлов за один раз.

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

Если нет, вы можете получить то же поведение с find | xargs.

find . -name '*.js' -print0 | xargs -0 script.py
...