У меня есть сценарий, который работает исправно в течение последних 3 месяцев. Сервер прошёл в прошлый понедельник, и с тех пор мой скрипт перестает работать. Скрипт висит на coords = p.communicate()[0].split()
.Popen communication не работает
Вот часть сценария:
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()
?
Похоже, ваш TCL скрипт является то, что висит. Исправьте это. – martineau
«Бесконечно ли он« вешает »на' communication() ', т. Е. Подпроцесс просто не выходит (вы должны его контролировать)? «Различные» серверы обычно подразумевают, что многие части среды, в которой работает программа, различны. Возможно, программа (подпроцесс) зависает, потому что она ожидает ввода от stdin. Попробуйте открыть канал для stdin через 'stdin = subprocess.PIPE' и предоставить некоторый вход для подпроцесса (например, новой строки) через' p.communicate ("\ n") '. Если это поможет, мы сможем позже выяснить, что именно вызвало эту разницу. –
Мартино вы правы. проблема с TCL-скриптом. Понятия не имею почему. тот же скрипт работает должным образом в течение последних 3 месяцев. плохо попытайтесь понять это. – MrGRafael