Ответы пользователя по тегу Стандартные потоки
  • Как при помощи bat-файла запустить программу python и ввести данные в нее?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Конечно возможно. У меня сейчас винды под рукой нет, но выглядеть будет примерно так.
    Программа, назовём её my_python_script.py:
    x = input()
    print('Text from input:', x)

    Батник:
    echo the string for python | python my_python_script.py

    Если инпутов несколько, то передать нужно несколько строчек.
    Чтобы сделать это с помощью echo, нужно написать строку с абзацем внутри. Я понятия не имею как экранируется абзац в bat-файлах, поэтому могу предложить такой вариант.
    my_python_script.py:
    x = input()
    y = input()
    z = input()
    rest = []
    while z != 'END':
        rest.append(z)
        z = input()
    
    print('x=', x, 'y=', y)
    print('rest=', rest)


    my_script.bat:
    echo The X string
    echo The Y string
    echo Other string 1
    echo line 2
    echo line 3
    echo line 4
    echo END

    Вызываем так:
    my_script.bat | python.exe my_python_script.py
    Весь выхлоп из батника попадёт на вход питоновского скрипта.
    Можно сделать еще один батник, который сделает такой вызов. Можно описать подпрограмму внутри батника, которая будет печатать строчки и в том же батнике её вызвать пайпом с передачей питону.

    Пайп - это такой виртуальный файл в операционной системе, который можно либо читать, либо писать. либо и то и другое. Зависит от того как сделан пайп. Для каждой программы система при запуске создаёт три пайпа: stdin, stdout, stderr.
    С помощью `|` в командной строке между командами можно сделать конвейер, когда выхлоп левой команды в stdout направляется на вход правой команды в stdin. Таким паровозом можно сколько угодно команд соединить.
    С помощью `>` можно перенаправить stdout в локальный файл с заданным именем:
    echo text to write into the file > the_file.txt
    С помощью `<` можно в stdin передать содержимое файла.
    Там много всяких хитростей с этими перенаправлениями, но лучше почитайте профильную статью или документацию.
    Питон читает с помощью input() из stdin и по умолчанию пишет с помощью print в stdout. echo в bat-файле тоже пишет в stdout.
    В линуксе (и в винде, если поставить поддержку шелла) есть куча других полезных команд и утилит для работы в командной строке (cat, tee, ...)
    Ответ написан
    7 комментариев