1
我有一個腳本,在過去3個月裏一直正常工作。服務器上週一停止運行,此後我的腳本停止工作。腳本掛在coords = p.communicate()[0].split()
。Popen通信不起作用
下面是腳本的一部分:
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
它是否'無限'掛在'溝通()',即子流程是否不退出(你應該監視)? 「不同的」服務器通常意味着程序運行環境的許多部分都不相同。這可能是(子進程)程序掛起,因爲它期望從stdin輸入。嘗試通過'stdin = subprocess.PIPE'打開一個管道到stdin,並通過'p.communicate(「\ n」)'提供一些輸入給子流程(例如換行符)。如果這有幫助,我們可以稍後找出究竟是什麼觸發了這種差異。 –
Martineau你是對的。 TCL腳本導致了這個問題。我不知道爲什麼。相同的腳本在過去3個月裏一直在正常工作。生病試圖找出答案。 – MrGRafael