Имам скрипт, който работи правилно през последните 3 месеца. Сървърът падна миналия понеделник и оттогава скриптът ми спря да работи. Скриптът виси на coords = p.communicate()[0].split()
.
Ето част от скрипта:
class SelectByLatLon(GridSelector):
def __init__(self, from_lat, to_lat, from_lon, to_lon):
self.from_lat = from_lat
self.to_lat = to_lat
self.from_lon = from_lon
self.to_lon = to_lon
def get_selection(self, file):
p = subprocess.Popen(
[
os.path.join(module_root, 'bin/points_from_latlon.tcl'),
file,
str(self.from_lat), str(self.to_lat), str(self.from_lon), str(self.to_lon)
],
stdout = subprocess.PIPE
)
coords = p.communicate()[0].split()
return ZGridSelection(int(coords[0]), int(coords[1]), int(coords[2]), int(coords[3]))
Когато стартирам скрипта на друг сървър, всичко работи добре. Мога ли да използвам нещо друго вместо p.communicate()[0].split()
?
communicate()
, т.е. дали подпроцесът просто не излиза (трябва да наблюдавате това)? Различните сървъри обикновено предполагат, че много части от средата, в която програмата работи, са различни. Възможно е програмата (подпроцес) да виси, защото очаква вход от stdin. Опитайте да отворите канал към stdin чрезstdin=subprocess.PIPE
и предоставете някакъв вход към подпроцеса (напр. нов ред) чрезp.communicate("\n")
. Ако това помогне, по-късно можем да разберем какво точно е предизвикало тази разлика. - person Dr. Jan-Philip Gehrcke   schedule 15.07.2013