簡體   English   中英

等待GUI應用程序完全啟動,然后再運行腳本

[英]Wait for a GUI application to fully startup before running script

如果我在bash腳本中有這樣的內容:

audacity &
pid=$!

wmctrl -r "Audacity" -e 0,0,0,800,600

...它通常會失敗,因為進程啟動( audacity & )將比完全顯示Audacity窗口(並可以通過wmctrl進行控制)早得多的時間完成/返回,否則可能要花費幾秒鍾。

在繼續執行腳本之前,是否有一種簡單的方法可以“同步”或“等待” GUI應用程序完全啟動(即其窗口已完全呈現)? 我找到了一種方法,我將其發布為答案-但如果有一種更簡單,更緊湊的方法,我一直在徘徊

編輯:這確實檢測何時顯示窗口; 但無法檢測其中所有菜單/小部件的放置/布局是否完成

好的,所以首先我運行以下腳本:

audacity &
pid=$!

while [ "1" ] ; do
  xwininfo -name 'Audacity'
  sleep 0.1
done

...應該這樣運行,以獲得完整的日志:

bash testscript.sh 2>&1 | tee testscript.log

...可以看到一點,可以說xwininfo的轉儲是“轉換”:

xwininfo: Window id: 0x3a000b5 (has no name)

  Absolute upper-left X:  0
  Absolute upper-left Y:  0
  Relative upper-left X:  0
  Relative upper-left Y:  0
  Width: 200
  Height: 200
  Depth: 24
  Visual: 0x21
  Visual Class: TrueColor
  Border width: 0
  Class: InputOutput
  Colormap: 0x20 (installed)
  Bit Gravity State: NorthWestGravity
  Window Gravity State: NorthWestGravity
  Backing Store State: NotUseful
  Save Under State: no
  Map State: IsUnMapped
  Override Redirect State: no
  Corners:  +0+0  -824+0  -824-400  +0-400
  -geometry 200x200+0+0

xwininfo: Window id: 0x4c00587 "Audacity"

  Absolute upper-left X:  50
  Absolute upper-left Y:  59
  Relative upper-left X:  0
  Relative upper-left Y:  18
  Width: 830
  Height: 540
  Depth: 24
  Visual: 0x21
  Visual Class: TrueColor
  Border width: 0
  Class: InputOutput
  Colormap: 0x20 (installed)
  Bit Gravity State: NorthWestGravity
  Window Gravity State: NorthWestGravity
  Backing Store State: NotUseful
  Save Under State: no
  Map State: IsViewable
  Override Redirect State: no
  Corners:  +50+59  -144+59  -144-1  +50-1
  -geometry 830x540+50-1

因此,我基本上可以為不包含“沒有名稱”或包含“地圖狀態:IsViewable”的xwininfo輸出設置grep ...

所以,我終於嘗試了這一點-似乎可行:

audacity &
pid=$!

WINREP=""
while [[ ! "`echo $WINREP | grep -l 'Map State: IsViewable'`" ]] ; do
  WINREP=$(xwininfo -name 'Audacity')
  #echo $WINREP
  sleep 0.1
done

echo Exited

# must use -F here for case-insensitive, to ensure proper window targetting
wmctrl -v -F -r "Audacity" -e 0,0,0,800,600

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM