Как показать мне вывод сценария python argparse, результат печати выходит из командной строки - PullRequest
1 голос
/ 19 июня 2020

Я все еще относительно новичок в Python. Я должен написать сценарий Python, который распечатывает все файлы и каталоги при определенных условиях: объяснение упражнения вы можете найти ниже.

Решение упражнения моего курса Scripting-languages ​​не соответствует Кажется, не печатаю фактические результаты, я искал и пробовал, но не вижу, что с этим не так. В конце концов, это должно быть решение.

Предполагаемое решение:

from pathlib import Path
import argparse
from pathlib import Path
import os
import re


def minimum_size(size):
    def check(filename):
        return os.path.getsize(filename) >= size



parser = argparse.ArgumentParser(prog='find')
parser.add_argument('path', default='.')
parser.add_argument('--minimum-size', dest='minimum_size', default=0, type=int)
parser.add_argument('--maximum-size', dest='maximum_size', default=float('inf'), type=int)
parser.add_argument('--no-directories', dest='no_directories', default=False, action='store_true')
parser.add_argument('--no-files', dest='no_files', default=False, action='store_true')
parser.add_argument('--extension', dest='extension')
parser.add_argument('--contains', dest='contains')

args = parser.parse_args()


path = Path(args.path)
for entry in path.glob('**/*'):
    if not os.path.getsize(entry) >= args.minimum_size:
        continue

    if not os.path.getsize(entry) <= args.maximum_size:
        continue

    if args.no_directories and os.path.isdir(entry):
        continue

    if args.no_files and os.path.isfile(entry):
        continue

    if args.extension and not entry.suffix == args.extension:
        continue

    if args.contains:
        if not os.path.isfile(entry):
            continue

        with open(entry, 'r') as file:
            contents = file.read()

            if not re.search(args.contains, contents):
                continue

    print(entry)

Объяснение:

Мои собственные комментарии по этому поводу: Я думаю, что примеры должны включать расширение при вызове файла, и я делаю это при попытке выполнить код. Я даже включаю весь путь к файлу, чтобы не получить ошибку ObjectNotFound. Когда я запускаю решение в Powershell в Python, командная строка сразу открывается и закрывается. Когда я запускаю его непосредственно в Powershell, открывается командная строка, выводится список всех результатов и сразу же закрывается, когда это делается. Если бы вы могли дать мне способ просто остановить закрытие командной строки, чтобы я мог видеть результат. Я уже был бы очень счастлив.

Write a script `find.py` that prints out all files and directories
that satisfy certain conditions.

The following functionality must be supported:

* One positional parameter that specifies the directory in which to start looking recursively.
* `--minimum-size=N`: only files whose size is at least `N` must be listed.
* `--maximum-size=N`: only files whose size is at most `N` must be listed.
* `--no-directories`: don't list directories.
* `--no-files`: don't list files.
* `--extension=EXT`: only list entries with extension `EXT`
* `--contains=REGEX`: only list files whose contents match `REGEX`.

To get a better feel for how your script should work, feel free
to experiment with the solution. For example, try

`bash
# List everything starting from two directories up
$ python find ../..

# List all python files in current directory
$ python find --extension=.py .
`

1 Ответ

0 голосов
/ 19 июня 2020

Вместо запуска сценария в Powershell, который использует командную строку для выполнения сценария. Запустите сценарий непосредственно в командной строке, чтобы увидеть результат.

Чтобы изменить терминал в Visual Studio Code: Щелкните текущий терминал, чтобы увидеть раскрывающееся меню, и нажмите «Выбрать оболочку по умолчанию». В списке вариантов выберите «Командная строка».

...