Bagaimana menjalankan skrip Python di jendela terminal dengan mengklik dua kali?

2

Saya menjalankan OSX, dan saya membuat aplikasi yang memiliki program Python di Resources folder, skrip Bash memanggil skrip Python untuk dijalankan ketika aplikasi diluncurkan. Script ada di MacOS folder di dalam aplikasi, dinamai sama dengan aplikasi. Saya punya skrip Bash ini:

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

Saya pikir skrip Bash akan dieksekusi ketika aplikasi diluncurkan, sehingga menyebabkan skrip python dijalankan melalui jendela terminal. Namun ketika saya mengklik dua kali aplikasi, tidak ada yang terjadi!

Jadi pada dasarnya, saya ingin skrip bash untuk membuka program Python di jendela terminal sehingga pengguna dapat berinteraksi dengannya.

Apa yang kulewatkan di sini?

Steampunkery
sumber
Bagaimana menjalankan di latar belakang akan membantu?
Steampunkery
Ketika saya mengklik dua kali aplikasi, tidak ada yang terjadi! Saya ingin skrip bash untuk membuka program python di jendela terminal sehingga pengguna dapat berinteraksi dengannya
Steampunkery
Apakah Anda melewatkan "s" di "/ Aplikasi /" di jalur Anda di skrip itu?
Spiff
biarkan saya memeriksa .... itu mungkin salah ketik ketika saya mengetikkan skrip untuk pertanyaan.
Steampunkery
tidak, skrip memiliki "s", saya akan mengedit pertanyaan
Steampunkery

Jawaban:

3

Inilah solusi yang lebih baik untuk masalah Anda jika Anda benar-benar membutuhkannya .app bundel:

Di Anda Converter.app/Contents/MacOS/Converter script, luncurkan skrip Python Anda dengan perintah "open":

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

(Saya melakukan trik relatif pathname di atas sehingga Anda tidak mengkodekan jalur absolut yang akan rusak jika Anda memindahkan .app sekitar.)

Pastikan Anda Resources/Converter.py skrip memiliki Python shebang di bagian atas:

#!/usr/bin/python

Pastikan keduanya MacOS/Converter dan Resources/Converter.py ditandai dapat dieksekusi (digunakan chmod a+x filename pada mereka).

Saya menguji pengaturan ini dan open perintah berhasil menemukan bahwa a .py File harus dibuka di Terminal tanpa saya melakukan apa pun. Saya tidak berpikir saya sebelumnya terkait .py file dengan Terminal.app sebelumnya pada sistem ini, jadi saya pikir petunjuk ini tidak memerlukan langkah lebih lanjut bahkan pada sistem yang bersih.

Spiff
sumber
1

Cara termudah untuk membuat skrip yang dapat diklik ganda yang berjalan di jendela Terminal baru adalah dengan mengakhiri nama file dengan ".command". Kemudian Anda dapat mengklik dua kali pada file skrip itu sendiri, tidak perlu untuk bundel / paket .app.

Jika Anda ingin mengeksekusi bash perintah sebelum Python, Anda bisa meletakkan keduanya di file yang sama tetapi membungkus kode Python dalam bash exec pernyataan. Script TCL sering melakukannya dengan cara ini. Jika Anda hanya ingin kode Python dan tidak bash kode, ubah shebang di atas ke #!/usr/bin/python (atau di mana pun Python tinggal di sistem Anda).

Saya pribadi tidak suka apa pun yang menampilkan dirinya sebagai .app tetapi sebenarnya berjalan di jendela Terminal alih-alih menjadi aplikasi aslinya. Satu-satunya waktu saya melihat ini dilakukan adalah titik akhir Ixia Chariot untuk OS X. Saya belum melihatnya dalam beberapa tahun, tetapi mungkin masih bekerja seperti itu. Ini unduhan gratis. Anda mungkin ingin mengambilnya dan melihat bagaimana mereka melakukannya dan mungkin memposting Jawaban untuk pertanyaan Anda sendiri. Saya pikir solusi mereka melibatkan pengemasan file pengaturan Terminal di aplikasi mereka. Saya pikir itu menyebabkan instance Terminal.app terpisah untuk diluncurkan dengan pengaturan kustom mereka yang aneh, yang menjengkelkan dengan cara yang segar dan menarik. :)

Spiff
sumber
Saya membutuhkannya untuk menjadi aplikasi. Ketika saya mengubahnya ke Converter.command, dikatakan bahwa aplikasi tersebut tidak dapat diluncurkan karena tidak lengkap atau rusak.
Steampunkery
0

Coba ubah skrip yang Anda miliki .command atau .tool ekstensi, tetapi mungkin itu tidak bisa berfungsi di OS X baru-baru ini.


Namun jika Anda membutuhkan skrip untuk menjadi aplikasi, Anda harus membuatnya.

Struktur dasar aplikasi Mac adalah:

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

Kemudian salin skrip Anda ke MacOS/ (dengan nama yang sama dengan aplikasi Anda), yang harus berisi kode yang dapat dieksekusi aplikasi mandiri. Semua sumber daya lainnya masuk Resources/.

Silakan lihat appify naskah oleh Thomas (atau Versi Mathias itu) yang pada dasarnya seperti:

#!/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"

Pemakaian:

appify foo.sh "Bar"

Sumber: Cara membuat aplikasi Mac sederhana dari skrip shell


Atau Anda dapat menggunakan:

  • DropScript yang memungkinkan Anda membuat aplikasi baru (seperti skrip yang ditulis dalam sh, perl, dll.).
  • Platypus - aplikasi yang membuat aplikasi Mac OS X asli dari skrip yang ditafsirkan seperti skrip shell atau program Perl, Ruby dan Python.
  • Buat di beberapa IDE (seperti Eclipse) yang memiliki opsi seperti itu untuk melakukannya.

Atau buat secara manual dengan:

  • buat struktur folder aplikasi,
  • tempatkan skrip Anda ke: MyApp.app/Contents/MacOS/MyApp.app
  • membuat file dapat dieksekusi

Dengan kata lain ( Gino ):

  1. Buat skrip shell Anda (mis command.sh )
  2. Berikan izin eksekusi ( chmod 755 ./command.sh )
  3. Dapatkan Info → Buka dengan: → (kaitkan aplikasi Terminal)
  4. Dapatkan Info → (letakkan ikon yang Anda inginkan di atasnya)

Lihat juga:

kenorb
sumber
Saya tidak berpikir Anda menguji instruksi Anda sendiri untuk melihat apakah mereka akan memenuhi persyaratan OP. Instruksi ini akan menyebabkan skrip shell dieksekusi, tetapi mereka tidak akan menyebabkannya dieksekusi dalam jendela Terminal seperti yang diinginkan OP. DropScript berasal dari 2002 dan hanya PowerPC. Platypus mungkin merupakan solusi yang layak, tetapi OP tampaknya ingin mencari cara untuk melakukannya sendiri.
Spiff