Como executar o script Python em uma janela de terminal clicando duas vezes nele?

2

Estou executando o OSX e estou criando um aplicativo que tem um programa Python na pasta Resources , o script Bash chama o script Python para ser executado quando o aplicativo é iniciado. O script está na pasta MacOS do aplicativo, com o mesmo nome do aplicativo. Eu tenho este script Bash:

#!/bin/bash
clear
python /Applications/Converter.app/Contents/Resources/Converter.py

Eu achei que o script Bash seria executado quando o aplicativo fosse iniciado, fazendo com que o script python fosse executado por meio de uma janela de terminal. No entanto, quando clico duas vezes no aplicativo, nada acontece!

Então, basicamente, eu quero que o script bash abra o programa Python em uma janela de terminal para que o usuário possa interagir com ele.

O que estou perdendo aqui?

    
por Steampunkery 03.09.2015 / 19:23

3 respostas

3

Aqui está uma solução melhor para o seu problema se você realmente precisar que ele seja um .app bundle:

No seu script Converter.app/Contents/MacOS/Converter , inicie seu script Python com o comando "open":

open $(dirname "$0")/../Resources/Converter.py

(Eu fiz um truque de caminho relativo acima, então você não está codificando um caminho absoluto que quebraria se você movesse seu .app por aí).

Certifique-se de que seu script Resources/Converter.py tenha um shebang em Python na parte superior:

#!/usr/bin/python

Certifique-se de que MacOS/Converter e Resources/Converter.py estejam marcados como executáveis (use chmod a+x filename neles).

Eu testei essa configuração e o comando open concluiu com êxito que um arquivo .py deve ser aberto no Terminal sem que eu faça nada. Eu não acho que eu associei anteriormente .py arquivos com o Terminal.app antes neste sistema, então eu acho que essas instruções não precisariam de nenhuma outra etapa, mesmo em um sistema limpo.

    
por 05.09.2015 / 01:56
1

A maneira mais fácil de fazer um script duplo clicável que é executado em uma nova janela do Terminal é terminar o nome do arquivo com ".command". Em seguida, você pode clicar duas vezes no próprio arquivo de script, sem necessidade de um pacote / pacote .app.

Se você quiser executar os comandos bash antes do Python, poderá colocar os dois no mesmo arquivo, mas incluir o código Python em uma instrução bash exec . Os roteiristas do TCL fazem isso muito. Se você quer apenas código Python e nenhum código bash , altere a shebang na parte superior para #!/usr/bin/python (ou onde quer que o Python esteja no seu sistema).

Eu pessoalmente não gosto de nada que se apresente como um .app, mas na verdade é executado em uma janela do Terminal, em vez de ser seu próprio aplicativo real. A única vez que vi isso foi o endpoint Ixia Chariot para o OS X. Eu não o analisei em poucos anos, mas ainda assim pode funcionar dessa maneira. É um download gratuito. Você pode querer pegá-lo e olhar como eles fizeram isso e talvez postar uma resposta à sua própria pergunta. Acho que a solução deles envolveu o empacotamento de um arquivo de configurações do Terminal em seu aplicativo. Eu acho que causou uma instância separada do Terminal.app para ser lançado com suas configurações personalizadas estranhas, o que era irritante de uma maneira nova e excitante. :)

    
por 04.09.2015 / 17:32
0

Tente alterar seu script para ter a extensão .command ou .tool , mas possivelmente não funcionará no OS X recente.

No entanto, se você precisar que o script seja um aplicativo, crie um.

A estrutura básica de um aplicativo do Mac é:

MyApp.app/
   Contents/
      Info.plist
      MacOS/
      Resources/

Copie seu script em MacOS/ (com o mesmo nome do aplicativo), que deve conter o código executável autônomo do aplicativo. Todos os outros recursos entram em Resources/ .

Por favor, dê uma olhada no script appify de Thomas (ou Versão Mathias disso, que basicamente é como:

#!/usr/bin/env bash

APPNAME=${2:-$(basename "$1" ".sh")}
DIR="$APPNAME.app/Contents/MacOS"

if [ -a "$APPNAME.app" ]; then
  echo "$PWD/$APPNAME.app already exists :("
  exit 1
fi

mkdir -p "$DIR"
cp "$1" "$DIR/$APPNAME"
chmod +x "$DIR/$APPNAME"

echo "$PWD/$APPNAME.app"

Uso:

appify foo.sh "Bar"

Fonte: Como criar aplicativos simples para Mac a partir de scripts de shell

Como alternativa, você pode usar:

  • DropScript que permite criar novas aplicações (como scripts escritos em sh, perl, etc.).
  • Platypus - um aplicativo que cria aplicativos nativos do Mac OS X a partir de scripts interpretados, como scripts de shell ou programas Perl, Ruby e Python.
  • Crie em algum IDE (como o Eclipse) que tenha essas opções para fazê-lo.

Ou crie-o manualmente por:

  • crie a estrutura de pastas do aplicativo,
  • coloque seu script em: MyApp.app/Contents/MacOS/MyApp.app
  • torna o arquivo executável

Em outras palavras ( Gino ):

  1. Create your shell script (ex command.sh)
  2. Give it execution permissions (chmod 755 ./command.sh)
  3. Get Info → Open with: → (associate the Terminal app)
  4. Get Info → (put the icon you want on it)

Veja também:

por 04.09.2015 / 21:35