Задать вопрос
@amaterasu0

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

У меня есть программа на python с input'ом и мне нужно запустить её через bat-файл, а также через этот файл ввести данные в эту программу. Такое возможно?
  • Вопрос задан
  • 9777 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
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, ...)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@xDimus
Можно так
inp.py:
a = input()
b = input()
c = input()
print(a, b, c)

inp.txt
11
22
33


запускаем из командной строки или поместив это в inp.bat:
inp.py < inp.txt

результат:
11 22 33
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы