我需要获取Python窗口的大小并将其分配给变量。我正在尝试:
windowSize = '''
tell application "System Events" to tell application process "%(app)s"
get size of window 1
end tell
''' % {'app': app} // app = "Terminal
(wSize, error) = Popen(['osascript', '/Setup.scpt'], stdout=PIPE).communicate()
print("Window size is: " + wSize)
我仅收到此错误:TypeError: can only concatenate str (not "bytes") to str
我是Python的新手,希望您能为我提供帮助
答案 0 :(得分:2)
您需要将AppleScript(即windowSize
)作为输入传递给Popen.communicate()
:
示例:
from subprocess import Popen, PIPE
app = "Terminal"
windowSize = '''
tell application "%(app)s"
get size of window 1
end tell
''' % {'app': app}
proc = Popen(['osascript', '-'], stdin=PIPE, stdout=PIPE, stderr=PIPE, universal_newlines=True)
wSize, error = proc.communicate(windowSize)
print("Window size is: " + wSize)
注释:
在您的windowSize
AppleScript中,不必tell application "System Events" to tell ...
,而只需tell application "%(app)s"
。但是,假设在系统偏好设置中启用了辅助设备访问,您仍然可以使用AppleScript。
这会将类似以下内容的内容记录到控制台:
Window size is: 487, 338
您可能要考虑利用print
语句中的str.replace()
用,
替换逗号(x
)。例如,将上面要点中的print
语句更改为此:
print("Window size is: " + wSize.replace(",", " x"))
将改为打印以下内容:
Window size is: 487 x 338
如果您想将上面proc
和wSize
开头的两行代码替换为一行(类似于您的OP),则用以下代码替换代替:
(wSize, error) = Popen(['osascript', '-'], stdin=PIPE, stdout=PIPE, stderr=PIPE, universal_newlines=True).communicate(windowSize)
要将窗口 width 和 height 作为两个单独的变量,您可以随后使用str.split()
方法来拆分wSize
变量(使用字符串", "
作为分隔符)。例如:
# ...
wWidth = wSize.split(", ")[0]
wHeight = wSize.split(", ")[1]
print("Window width is: " + wWidth)
print("Window height is: " + wHeight)