p = Popen([exefile], shell=False, stdin=PIPE, stdout=PIPE, stderr=subprocess.STDOUT)
p.communicate('1\n2\n3\n')
p = Popen([exefile], shell=False, stdin=PIPE, stdout=PIPE, stderr=subprocess.STDOUT)
p.communicate('1\n2\n3\n')
Андрей СветловС каких пор копипейст считается хорошей техникой программирования?
Хотите построчно - копируйте реализацию communicate себе и правьте как вам нужно.
Warning: Use communicate() rather than .stdin.write, .stdout.read or .stderr.read to avoid deadlocks due to any of the other OS pipe buffers filling up and blocking the child process.
Interact with process: Send data to stdin. Read data from stdout and stderr, until end-of-file is reached. Wait for process to terminate.Ждет завершения процесса! И ни слова про циклы.
Андрей СветловА что тут военного то.
Жизнь несовершенна. Я как бы намекал, что изучение исходников .communicate может натолкнуть на мысль, почему все сделано так а не иначе.
p.stdin.write('asd\n')
p.stdin.write('asd\n')
p.stdin.write('asd\n')
p.stdin.write('asd\n')
p.stdin.write('asd\n')
p.stdin.close()
for line in p.stdout:
....
>>> p = Popen(["grep.exe",'""'], shell=False, stdin=PIPE, stdout=PIPE, stderr=subprocess.STDOUT)
>>> p.stdin.write("a\n")
>>> p.stdout.next()