环境

环境

我得到了不同的屏幕分辨率(在 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 的等效项吗?

相关内容