LINUX.ORG.RU

bash+python

 


0

1

Уважаемые Гуру!

Есть функция на python, реализующая отнесение точки к полигону

# determine if a point is inside a given polygon or not # Polygon is a list of (x,y) pairs.

def point_inside_polygon(x,y,poly):

n = len(poly)

inside =False

p1x,p1y = poly[0]

for i in range(n+1):

p2x,p2y = poly[i % n]

if y > min(p1y,p2y):

if y <= max(p1y,p2y):

if x <= max(p1x,p2x):

if p1y != p2y:

xinters = (y-p1y)*(p2x-p1x)/(p2y-p1y)+p1x

if p1x == p2x or x <= xinters:

inside = not inside

p1x,p1y = p2x,p2y

return inside

#Test point_x = 0.001

point_y = 0.001

polygon = [ (1, 1), (2, 2), (3, 3), (4, 4), (1, 1) ] print point_in_poly(point_x,point_y,polygon)

Мой bash сценарий формирует point_x point_y. Как Python скормить точки из bash.

мне немношко дурно от форматирования, но вообще примерно так:

echo "point_x=0.001 point_y=0.001" | python -c 'import sys;pxs,pys=sys.stdin.split();print (pxs,pys)'

только ради всего святого используй ast.literal_eval вместо eval

anonymous ()

Немного уточню есть bash он генерирует точки point_x, point_y. Есть 1.py в которой лежит функция. Есть 1.txt в которой лежит полигон. Хочу из bash передавать точки на 1.py использовать полигон из 1.txt и получать ответ True/False и продолжать bash.

cat $file.txt | sed 's/,/ /g' | awk '{print $1,$2}' | while read line do

тут обращение к 1.py

done

продолжение bash

dgorski ()
Ответ на: комментарий от dgorski

Ну так передавай результат анализа через код возврата sys.exit(0/1) а в баше проверяй


...
1.py "point_x=0.001 point_y=0.001"

if [ $? -eq 0 ]; then
  echo Point not inside poligon
else
  echo Point inside poligon
fi
...

sigurd ★★★ ()
Последнее исправление: sigurd (всего исправлений: 1)