我得到了不同的屏幕分辨率(在 Python 脚本中),具体取决于我是手动在 Cygwin 中键入命令还是使用 shell 脚本运行它们,我不明白为什么。
我正在运行 Windows 8.1 / Cygwin 2.8.2(以及启动时的 XWin Server)/Python 2.7.13(并且是 Cygwin 和 Python 的新手;如果我可以提供更多详细信息,请告诉我)。
当我启动 Windows,打开 Cygwin 终端,输入export DISPLAY=:0.0
然后输入 时python c:/users/<my directories>/<python-file>.py
,我的 GUI Python 脚本正常运行。
(w, h = root.winfo_screenwidth(), root.winfo_screenheight()
例如,如果出现在Python脚本中,则对应于屏幕分辨率的输出值为(1920, 1200)。)
但是,如果我尝试通过双击以下 Windows 批处理文件来自动执行此过程:
c:\cygwin\bin\bash c:/users/<my directories>/<shell-file>.sh
shell 文件包含的位置
#!/bin/sh
export DISPLAY=:0.0
python c:/users/<my directories>/<python-file>.py
然后我的 GUI Python 脚本运行但变形(即对于屏幕来说太大),并且分辨率返回为 (1280, 800)。
为什么这两种方法会给出不同的结果?如何让 Python 脚本以自动方式以 (1920, 1200) 的分辨率运行?谢谢。
答案1
我不知道到底是什么问题,但有以下几点:
环境
我的第一个猜测是使用 cygwin 终端和通过批处理文件执行 bash 时的环境有所不同。
从 cygwin 终端运行时,执行命令env
来查看环境是什么(自从我使用 Windows 以来已经有一段时间了,但我怀疑 env 是 cygwin 的一部分或内置于 bash 中)。
然后将相同的命令添加到 shell 脚本的开头。
#!/bin/sh
export DISPLAY=:0.0
env
python c:/users/<my directories>/<python-file>.py
比较两个环境,看看是否有差异。
专家提示:您可以将命令的输出写入env
文件env > c:/users/<your directories>/env1.txt
(然后env2.txt
从 shell 脚本中使用),然后将它们与命令行工具进行比较diff
。 IE diff env1.txt env2.txt
。
口译员
接下来的事情是相关的,但是在每种情况下正在执行什么 python 解释器。你的系统上只安装了一个Python吗?或者你可能有多个。例如,您是通过 cygwin 和 anaconda 安装的吗?
如果有多个,请检查which python
每种情况下正在执行的版本。
图形用户界面工具包
你用的是什么gui工具包。我对 API 不熟悉winfo_screenwidth()
。据推测,这是由您正在使用的某些库/包提供的。那是哪个包?
我不确定windows世界/cygwin,但在linux世界中,程序可以确定是否stdin
是终端。在这两种情况下,您使用的工具包可能会有不同的行为。如果是这样,可以从工具包文档中获取该信息。
另外,IIRC在windows中启动程序有两种方法。有标准方式 ieint main()
和 GUI 方式(我不记得本例中主函数的名称)。我记得对于某些解释性语言,有不同的解释器二进制文件,具体取决于您想要的入口点。 GUI 可能以 . 开头或结尾w
。例如,我认为javaw.exe
是 gui 版本,java.exe
是控制台版本(对于 java)。 Windows 中有 python 的等效项吗?