Я бег два процесса одновременно в питоне с помощью модуля подпроцесса:Почему Popen.stdout содержит только часть вывода?
p_topic = subprocess.Popen(['rostopic','echo','/msg/address'], stdout=PIPE)
p_play = subprocess.Popen(['rosbag','play',bagfile_path])
Это ROS процессов: p_topic
прослушивает .bag
файла для воспроизведения и выводят некоторую информацию из этого .bag
файла в поток стандартного вывода; Затем я хочу получить доступ к этому выводу, используя объект p_topic.stdout
(который ведет себя как файл).
Однако, что я нахожу, это то, что объект p_topic.stdout
содержит только первые ~ 1/3 выходных строк, которые он должен иметь, то есть по сравнению с двумя командами вручную, одновременно в двух оболочках бок о бок ,
Я пробовал ждать много секунд для вывода, но это ничего не меняет, его примерно такое же соотношение линий, отснятых p_topic.stdout
каждый раз. Любые намеки на то, что это может быть, будут очень признательны!
EDIT:
Вот код чтения:
#wait for playing to stop
while p_play.poll() == None:
time.sleep(.1)
time.sleep(X)#wait for some time for the p_topic to finish
p_topic.terminate()
output=[]
for line in p_topic.stdout:
output.append(line)
Обратите внимание, что значение X в time.sleep (X) не имеет никакого значения
завершает ли ваш процесс? Вы [wait] (https://docs.python.org/2/library/subprocess.html#subprocess.Popen.wait) за него перед выполнением последнего 'read'? Вы должны показать код чтения – goncalopp
Кроме того, вы можете использовать ['check_output'] (https://docs.python.org/2/library/subprocess.html#subprocess.check_output), это упрощает работу – goncalopp
Are вы уверены, что не дожидаетесь ввода? Он не ждет каких-либо входных данных при запуске с терминала? –