У меня есть скрипт, который исправно работает последние 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=subprocess.PIPE
и предоставить некоторый ввод в подпроцесс (например, новую строку) черезp.communicate("\n")
. Если это поможет, позже мы сможем выяснить, что именно вызвало эту разницу. - person Dr. Jan-Philip Gehrcke   schedule 15.07.2013