Python Идеи для исправления проблемы перенаправления ввода-вывода std в сценарии для добавления GUI - PullRequest
0 голосов
/ 16 апреля 2020

Я использую небольшой модуль python, который я нашел на github для редактирования данных из PDF-файлов: https://github.com/JoshData/pdf-redactor

Он работает очень хорошо, единственная проблема заключается в том, что он наиболее вызывается из командной строки для перенаправления ввода / вывода, например, вот как вы бы назвали его в файле:

python example.py < in.pdf > in-redacted.pdf

Я ищу способы изменить его так, чтобы файлы ввода / вывода были просто строковые переменные / переменные пути внутри самого скрипта, так что будет легко обернуть GUI вокруг него, так как сейчас с перенаправлением я не уверен, как заставить GUI подавать параметры.

Я запутался, так как при запуске print(sys.argv) он показывает только входной файл, то есть перенаправление удаляет аргументы как позиционные параметры.

Когда я смотрю на библиотеку python, которую я использую, она очень жестко запрограммирована для перенаправления stdin / out, поэтому я думаю, что было бы более трудным вариантом переписать это:

    # This is the function that performs redaction.

    if sys.version_info < (3,):
        if options.input_stream is None:
            options.input_stream = sys.stdin # input stream containing the PDF to redact
        if options.output_stream is None:
            options.output_stream = sys.stdout # output stream to write the new, redacted PDF to
    else:
        if options.input_stream is None:
            options.input_stream = sys.stdin.buffer # input byte stream containing the PDF to redact
        if options.output_stream is None:
            options.output_stream = sys.stdout.buffer # output byte stream to write the new, redacted PDF to

    from pdfrw import PdfReader, PdfWriter
    # Read the PDF.
    document = PdfReader(options.input_stream)

    # Modify its Document Information Dictionary metadata.
    update_metadata(document, options)

    # Modify its XMP metadata.
    update_xmp_metadata(document, options)

    if options.content_filters:
        # Build up the complete text stream of the PDF content.
        text_layer = build_text_layer(document, options)

        # Apply filters to the text stream.
        update_text_layer(options, *text_layer)

        # Replace page content streams with updated tokens.
        apply_updated_text(document, *text_layer)

    # Update annotations.
    update_annotations(document, options)

    # Write the PDF back out.
    writer = PdfWriter()
    writer.trailer = document
    writer.write(options.output_stream)

Так что любые идеи приветствуются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...