Windows / Cygwin / Python: A resolução depende da entrada manual ou shell script?

0

Estou obtendo uma resolução de tela diferente (em um script Python) dependendo se eu digito comandos no Cygwin manualmente ou os executo usando um shell script, e não consigo entender o porquê.

Estou executando o Windows 8.1 / Cygwin 2.8.2 (e o XWin Server na inicialização) / Python 2.7.13 (e sou novo no Cygwin e Python; por favor, deixe-me saber se posso fornecer mais detalhes).

Quando inicio o Windows, abro um terminal Cygwin, digito export DISPLAY=:0.0 e depois digito python c:/users/<my directories>/<python-file>.py , meu script GUI Python é executado normalmente.

(Se w, h = root.winfo_screenwidth(), root.winfo_screenheight() aparecer no script Python, por exemplo, os valores de saída, correspondentes à resolução da tela, são (1920, 1200).)

No entanto, se eu tentar automatizar esse processo clicando duas vezes no seguinte arquivo em lotes do Windows:

c:\cygwin\bin\bash c:/users/<my directories>/<shell-file>.sh

onde o arquivo de shell contém

#!/bin/sh
export DISPLAY=:0.0
python c:/users/<my directories>/<python-file>.py

então meu script GUI Python é executado, mas está distorcido (isto é, é muito grande para a tela) e a resolução volta como (1280, 800).

Por que esses dois métodos fornecem resultados diferentes? Como posso obter um script Python para executar com uma resolução de (1920, 1200) de forma automatizada? Obrigado.

    
por Chemomechanics 06.09.2017 / 22:57

1 resposta

2

Eu não sei exatamente qual é o problema, mas aqui estão algumas coisas:

Ambiente

Meu primeiro palpite seria uma diferença no ambiente quando você usa o terminal cygwin e quando executa o bash através do arquivo em lote.

Ao executar a partir do terminal cygwin, execute o comando env para ver o que é o ambiente (já faz um tempo desde que usei o windows, mas suspeito que o env seja parte do cygwin ou seja integrado ao bash).

Em seguida, adicione o mesmo comando ao início do seu script de shell.

#!/bin/sh
export DISPLAY=:0.0
env
python c:/users/<my directories>/<python-file>.py

Compare os dois ambientes e veja se existem diferenças.

pro-tip : você pode gravar a saída do comando env em um arquivo com env > c:/users/<your directories>/env1.txt (depois usar env2.txt do seu script de shell) e compará-los com o comando ferramenta de linha diff . ou seja, diff env1.txt env2.txt .

Intérprete

A próxima coisa está relacionada, mas o interpretador python está sendo executado em cada caso. Você tem apenas um python instalado em seu sistema? Ou você pode ter vários. Por exemplo, você instalou através do cygwin e do anaconda?

Se você tiver vários, verifique qual versão está sendo executada com which python em cada caso.

GUI Toolkit

Qual kit de ferramentas de gui você está usando? Não estou familiarizado com a API winfo_screenwidth() . Presumivelmente isso é fornecido por alguma biblioteca / pacote que você está usando. Qual pacote é esse?

Não tenho certeza sobre o windows world / cygwin, mas no mundo linux é possível que um programa determine se stdin é ou não um terminal. O kit de ferramentas que você está usando pode ter um comportamento diferente nos dois casos. Se assim for, a documentação do kit de ferramentas seria onde ir para essa informação.

Além disso, o IIRC tem duas maneiras de iniciar um programa no Windows. Há a maneira padrão, por exemplo, int main() e a maneira da GUI (não lembro o nome da função principal neste caso). Lembro-me de que, para algumas linguagens interpretadas, existem binários de intérprete diferentes, dependendo de qual ponto de entrada você queria. O gui pode começar ou terminar com w . Por exemplo, acho que javaw.exe é a versão gui e java.exe é a versão do console (para java). Existe um equivalente para python no Windows?

    
por 07.09.2017 / 05:13