Конечно возможно. У меня сейчас винды под рукой нет, но выглядеть будет примерно так.
Программа, назовём её
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, ...)