Я пытаюсь написать, как мне кажется, простой служебный скрипт для вызова другой команды, но Popen.communicate (), похоже, добавляет новую строку.Я предполагаю, что это завершает ввод, и он работает с базовым сценарием, который принимает ввод и распечатывает его, но вызывает проблемы, когда другая программа является интерактивной (например, bc
).
Минимальнаякод для воспроизведения, используя bc вместо другой программы (поскольку обе они интерактивны, решение проблемы с bc должно решить проблему):
#!/usr/bin/env python
from subprocess import Popen, PIPE
command = "bc"
p = Popen(command, stdin=PIPE, stdout=PIPE, stderr=PIPE)
stdout_data = p.communicate(input="2+2")
print(stdout_data)
Это печатает ('', '(standard_in) 1: syntax error\n')
, предположительно вызванное приложеннойсимвол новой строки, так как по той же строке передается в bc в оболочке, echo "2+2" | bc
, печатается 4
очень хорошо.
Возможно ли использовать Popen.communicate () без добавления новой строки, или мне нужноиспользовать другой метод?