web-dev-qa-db-ja.com

ターミナルウィンドウでPythonスクリプトをダブルクリックして実行するにはどうすればよいですか?

OSXを実行していて、PythonプログラムがResourcesフォルダーにあるアプリを作成しています。BashスクリプトはPythonアプリの起動時に実行するスクリプト。スクリプトはアプリ内のMacOSフォルダーにあり、アプリと同じ名前が付けられています。次のBashスクリプトがあります。

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

アプリの起動時にBashスクリプトが実行されると思ったので、pythonスクリプトがターミナルウィンドウから実行されました。しかし、アプリをダブルクリックしても何も起こりません。

したがって、基本的には、bashスクリプトでPythonプログラムをターミナルウィンドウで開いて、ユーザーが操作できるようにします。

ここで何が欠けていますか?

2
Steampunkery

どうしても_.app_バンドルである必要がある場合は、次の問題に対するより良い解決策があります。

_Converter.app/Contents/MacOS/Converter_スクリプトで、「open」コマンドを使用してPythonスクリプトを起動します。

_open $(dirname "$0")/../Resources/Converter.py
_

(上記の相対パス名のトリックを実行したので、_.app_を移動した場合に破損する絶対パスをハードコーディングしていません。)

_Resources/Converter.py_スクリプトの上部にPythonシバンがあることを確認してください:

_#!/usr/bin/python
_

_MacOS/Converter_と_Resources/Converter.py_の両方が実行可能としてマークされていることを確認してください(それらには_chmod a+x filename_を使用してください)。

この設定をテストしたところ、openコマンドは、何もせずに_.py_ファイルをターミナルで開く必要があることを正常に認識しました。以前、このシステムで_.py_ファイルをTerminal.appに関連付けたことはないと思います。したがって、これらの手順は、クリーンなシステムでもこれ以上の手順は必要ないと思います。

3
Spiff

新しいターミナルウィンドウで実行されるダブルクリック可能なスクリプトを作成する最も簡単な方法は、ファイル名を「.command」で終了することです。次に、スクリプトファイル自体をダブルクリックできます。appバンドル/パッケージは必要ありません。

Pythonの前にbashコマンドを実行する場合は、両方を同じファイルに入れますが、Pythonコードをbashexecステートメントでラップします。TCLスクリプターはこの方法で多くのことを行います。 Pythonコードでbashコードがない場合は、上部のShebangを#!/usr/bin/python(またはPythonシステム上に存在する場所)に変更します。

個人的には、.appとして表示されるものは好きではありませんが、実際には、独自の実際のアプリではなく、ターミナルウィンドウで実行されます。これが行われているのを私が見たのは、OSX用のIxiaChariotエンドポイントだけでした。数年は見ていませんが、それでもそのように機能する可能性があります。無料でダウンロードできます。あなたはそれをつかんで彼らがそれをどのようにしたかを見て、そして多分あなた自身の質問への答えを投稿したいかもしれません。彼らの解決策は、ターミナル設定ファイルをアプリにパッケージ化することだったと思います。これにより、Terminal.appの別のインスタンスが奇妙なカスタム設定で起動され、新鮮でエキサイティングな方法で煩わしかったと思います。 :)

1
Spiff

スクリプトを.commandまたは.tool拡張子に変更してみてください。ただし、最近のOSXでは機能しない可能性があります。


ただし、スクリプトをアプリにする必要がある場合は、スクリプトを作成する必要があります。

Macアプリの基本構造は次のとおりです。

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

次に、スクリプトをMacOS/(アプリと同じ名前)にコピーします。これには、アプリケーションのスタンドアロン実行可能コードが含まれている必要があります。他のすべてのリソースはResources/に入ります。

基本的に次のようになる、Thomasによる appify スクリプト(または Mathiasバージョン )をご覧ください。

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

使用法:

appify foo.sh "Bar"

出典: シェルスクリプトから簡単なMacアプリを作成する方法


または、次を使用することもできます。

  • DropScript これにより、新しいアプリケーション(sh、Perlなどで記述されたスクリプトなど)を作成できます。
  • Platypus -シェルスクリプトやPerlなどのインタープリター型スクリプトからネイティブMac OS Xアプリケーションを作成するアプリ、RubyおよびPythonプログラム。
  • それを行うためのそのようなオプションを持っているいくつかのIDE(Eclipseなど)でそれを作成します。

または、次の方法で手動で作成します。

  • アプリのフォルダー構造を作成し、
  • スクリプトを次の場所に配置します:MyApp.app/Contents/MacOS/MyApp.app
  • ファイルを実行可能にする

言い換えれば( ジーノ ):

  1. シェルスクリプトを作成します(例:command.sh
  2. 実行権限を付与します(chmod 755 ./command.sh
  3. 情報を取得→次で開く:→(ターミナルアプリを関連付ける)
  4. 情報を得る→(必要なアイコンをその上に置きます)

参照:

0
kenorb