Я хочу subprocess.popen()
программу Swift с Python 3.
родитель.py:
import subprocess
#p = subprocess.Popen(['python3', 'sub.py'], universal_newlines = True, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.DEVNULL, bufsize=1)
p = subprocess.Popen(['swift', 'sub.swift'], universal_newlines = True, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.DEVNULL, bufsize=1)
while True:
a=input('command:')
if not a:
print(p.stdout.readline())
else:
p.stdin.write(a+'\n')
sub.swift
while true {
print(readLine()!)
}
Это не работает. p.stdout.readline()
ларьки.
Если я изменю команду на ['python3', 'sub.py']
и получу
sub.py
while True:
print(input())
Оно работает:
> python3 parent.py
command:a
command:[enter]
a
command:asdf
command:[enter]
asdf
Почему это? Как я могу это решить?
Сброс стандартного вывода у меня сработал:
import Darwin
while true {
print(readLine()!)
fflush(stdout)
}
Я не слишком знаком с Python, но я предполагаю, что Python print
, вероятно, автоматически очищается.
@JohnHao Правильно, в этом конкретном случае стандартный вывод буферизуется (я не знаю, насколько велик буфер), поскольку ваша программа на Python не может ничего читать без сброса. См. также: stackoverflow.com/questions/3723795/…
Благодарю вас! Это очень помогло. Можно поподробнее про промывку? Программа не пишет напрямую в стандартный вывод?