Почему подпроцесс требует двух вызовов.) Вызов (), когда Shell = false, но только один с Shell = true?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Почему подпроцесс требует двух вызовов.) Вызов (), когда Shell = false, но только один с Shell = true?

Сообщение Anonymous »

Я пишу сценарий Python, который отправляет выражения в калькулятор командной строки BC с использованием subprocess.popen . Я заметил разницу в поведении на основе того, использую ли я Shell = true или нет.

Код: Выделить всё

from subprocess import Popen, PIPE

p = Popen("bc -q", shell=True, stdin=PIPE, stdout=PIPE, text=True)
p.stdin.write("1+2\n")
p.stdin.flush()
print(p.stdout.readline().strip())  # outputs: 3
< /code>
это ведет себя как ожидалось. Я отправляю 1+2 
и результат 3 напечатан в одной строке.

Код: Выделить всё

from subprocess import Popen, PIPE

p = Popen(["bc", "-q"], shell=False, stdin=PIPE, stdout=PIPE, text=True)
p.stdin.write("1+2\n")
p.stdin.flush()
print(p.stdout.readline().strip())  # outputs: 1+2
print(p.stdout.readline().strip())  # outputs: 3
В этом случае первый .ReadLine () возвращает эхо ввода (), и только второй .ReadLine () дает фактический результат ().
Почему мне нужно вызовать .ReadLine () дважды, когда Shell = false , но только один раз, когда Shell = true ? Это связано с тем, как оболочка обрабатывает стандартные команды ввода -вывода или эхо? Как я могу надежно подавить входной эхо, если я хочу последовательное поведение? В обоих случаях я ожидал одного и того же поведения: отправьте выражение, подобное 1+2 на BC , и вернуть только результат 3 .
Но то, что я заметил:
  • с Shell = true , мне нужно было позвонить. Зачитывает () , чтобы получить результат>, чтобы получить результат>, чтобы получить результат>, чтобы получить результат>, чтобы получить результат. shell = false , первый .чикоизочный () возвращает входную строку (), а второй возвращает результат ().
Я не ожидал, что входной эхо появится при использовании Shell = false , и теперь я пытаюсь понять, почему это происходит и как сделать вывод последовательным между обоими подходами.

Подробнее здесь: https://stackoverflow.com/questions/797 ... t-only-one
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»