Используйте subprocess.Popen()
с параметром close_fds=True
, который позволит отбросить подпроцесс от самого процесса Python и продолжить работу даже после выхода Python.
https: // gist.github.com/yinjimmy/d6ad0742d03d54518e9f
import os, time, sys, subprocess
if len(sys.argv) == 2:
time.sleep(5)
print 'track end'
if sys.platform == 'darwin':
subprocess.Popen(['say', 'hello'])
else:
print 'main begin'
subprocess.Popen(['python', os.path.realpath(__file__), '0'], close_fds=True)
print 'main end'
Я считаю, что вы ищете не-жадное регулярное выражение, например:
/<div class="the_class">(.*?)<\/div>/m
Обратите внимание на добавленный ?
. Теперь захватная группа будет захватывать как можно меньше (не жадные), а не как можно больше (жадные).
Поскольку он добавляет другую зависимость и замедляет мою работу. Делает вещи более сложными. Кроме того, это решение применимо не только к HTML-тегам. Мои начальные и конечные строки могут быть любыми.
blockquote>Я привык думать так же, пока не получил работу по написанию пауков и аналитике веб-сайта, а затем написал большую систему RSS-агрегации - Парсер был единственным выходом из этого безумия. Без этого работа никогда не была бы закончена.
Да, регулярное выражение полезно и полезно, но вас ждут драконы. Например, эта общая строка вызовет проблемы:
'<div class="the_class"><div class="inner_div">foo</div></div>'
Regex
/<div class="the_class">(.*?)<\/div>/m
вернется:"<div class=\"the_class\"><div class=\"inner_div\">foo</div>"
Этот искаженный, но визуализируемый HTML:
<div class="the_class"><div class="inner_div">foo
еще хуже:
'<div class="the_class"><div class="inner_div">foo'[/<div class="the_class">(.*?)<\/div>/m] => nil
Принимая во внимание, что парсер может иметь дело с обоими:
require 'nokogiri' [ '<div class="the_class"><div class="inner_div">foo</div></div>', '<div class="the_class"><div class="inner_div">foo' ].each do |html| doc = Nokogiri.HTML(html) puts doc.at('div.the_class').text end
Выходы:
foo foo
Да, ваши начальные и конечные строки могут быть любыми, но есть хорошо известные инструменты для анализа HTML / XML, и по мере роста вашей задачи недостатки в использовании регулярного выражения станут более очевидными.
И, да, возможно, сбой анализатора. Я должен был обработать RSS-каналы, которые были так сильно искажены, что парсер взорвался, но небольшая предварительная обработка устранила проблему.