回答編集履歴
4
追記の追記
answer
CHANGED
@@ -66,6 +66,12 @@
|
|
66
66
|
|
67
67
|
---
|
68
68
|
|
69
|
-
|
69
|
+
(追記)
|
70
70
|
テスト用に私が作った上記の Automator アプリですが、テストを繰り返していたところ、一度にドラッグ&ドロップしたファイルのうち、一部が処理から漏れたり、ひどい時は全く処理ができなくなったりする不具合が観測されています。少しだけ調査をしてみましたが、原因はわかっていません。I/O が伴う処理なので処理が追いついていないのかと思い、引数をすべてまとめて python 側に渡し、Python 側でループさせてもみましたが、結果は一緒でした。
|
71
|
-
質問者さんの環境とスクリプトで同様の不具合が発生するかどうかはわかりませんが…。念のため追記しておきます。
|
71
|
+
質問者さんの環境とスクリプトで同様の不具合が発生するかどうかはわかりませんが…。念のため追記しておきます。
|
72
|
+
|
73
|
+
---
|
74
|
+
|
75
|
+
(追記の追記)
|
76
|
+
ドラッグ&ドロップが可能なアプリケーション形式ではなく、右クリック(コンテキストメニュー)から実行が可能なクイックアクション形式で作り直したら、問題なく実行されるようになりました。ドラッグ&ドロップというインタフェースでどうも不具合が生じているようです。クイックアクションは Finder や Touch Bar にも登録して実行できるという利点もあります。質問者さんの環境でも不具合が生じるようなら、クイックアクションでの作成を検討してみてはいかがでしょうか。
|
77
|
+
[Macでクイックアクション・ワークフローを使用する - Apple サポート](https://support.apple.com/ja-jp/guide/automator/aut73234890a/2.10/mac/11.0)
|
3
追記
answer
CHANGED
@@ -60,6 +60,12 @@
|
|
60
60
|
以下は補足です。
|
61
61
|
|
62
62
|
質問中に「Applescriptに慣れておらず」と書かれていますが、シェルスクリプトの間違いかと思います。
|
63
|
-
AppleScript は macOS に同梱されている、英語に似た構文を持つスクリプト言語で、macOS でのみ実行できるものです。「AppleScriptを実行」アクションを使えば
|
63
|
+
AppleScript は macOS に同梱されている、英語に似た構文を持つスクリプト言語で、macOS でのみ実行できるものです。「AppleScriptを実行」アクションを使えば Automator で Applescript を実行することもできますが、参考資料が少なく、構文にもクセのある Applescript を積極的に使う理由はないでしょう。
|
64
64
|
|
65
|
-
「シェルスクリプトを実行」アクションの「シェル」ポップアップメニューで「/usr/bin/python」を選べば、Python スクリプトファイルを別に用意しなくても、アクションのコマンドフィールドに直接、Python スクリプトを記入して実行することができます。ただしこの時に実行される Python は macOS に同梱の Python 2.7 になりますので、この方法で実行できる Python スクリプトは、Python 2.7 と標準ライブラリで実行できるスクリプトになります。
|
65
|
+
「シェルスクリプトを実行」アクションの「シェル」ポップアップメニューで「/usr/bin/python」を選べば、Python スクリプトファイルを別に用意しなくても、アクションのコマンドフィールドに直接、Python スクリプトを記入して実行することができます。ただしこの時に実行される Python は macOS に同梱の Python 2.7 になりますので、この方法で実行できる Python スクリプトは、Python 2.7 と標準ライブラリで実行できるスクリプトになります。
|
66
|
+
|
67
|
+
---
|
68
|
+
|
69
|
+
(追記)
|
70
|
+
テスト用に私が作った上記の Automator アプリですが、テストを繰り返していたところ、一度にドラッグ&ドロップしたファイルのうち、一部が処理から漏れたり、ひどい時は全く処理ができなくなったりする不具合が観測されています。少しだけ調査をしてみましたが、原因はわかっていません。I/O が伴う処理なので処理が追いついていないのかと思い、引数をすべてまとめて python 側に渡し、Python 側でループさせてもみましたが、結果は一緒でした。
|
71
|
+
質問者さんの環境とスクリプトで同様の不具合が発生するかどうかはわかりませんが…。念のため追記しておきます。
|
2
文言の修正
answer
CHANGED
@@ -11,7 +11,7 @@
|
|
11
11
|
echo "$f"
|
12
12
|
done
|
13
13
|
```
|
14
|
-
`$@`は引数のすべてを意味します。複数のファイルを同時にドラッグ
|
14
|
+
`$@`は引数のすべてを意味します。複数のファイルを同時にドラッグ&ドロップした場合は、すべてのファイルのフルパスのリストがここに格納されていす。
|
15
15
|
それに対して for ループを実行していますので、`$f`にはファイルのパスがひとつずつ順番に入ります。
|
16
16
|
上記のシェルスクリプトは以下の Python スクリプトに等しいです。
|
17
17
|
|
@@ -42,7 +42,7 @@
|
|
42
42
|
|
43
43
|
引数にはフルパスが渡されますので、必要に応じてそこからファイル名やディレクトリ名などを取り出すといいでしょう。
|
44
44
|
|
45
|
-
以下はテストのために私が書いたスクリプトです。ドラッグ
|
45
|
+
以下はテストのために私が書いたスクリプトです。ドラッグ&ドロップしたファイルと同じディレクトリに test.txt というファイルを作って、そこにファイル名とフルパスを書き込んでいます。
|
46
46
|
|
47
47
|
```python
|
48
48
|
import os
|
1
文言の追記
answer
CHANGED
@@ -36,8 +36,10 @@
|
|
36
36
|
実行したいバージョンの Python のパスをフルパスで指定するのが安全です。
|
37
37
|
自分で書いたスクリプト(上記では test.py)のパスも、必要であればフルパスで指定してください。上記ではチルダ (~) 展開を使って、ユーザディレクトリ直下にあることを示しました。
|
38
38
|
|
39
|
-
|
39
|
+
> ②取得したPathをPythonファイル内の引数に設定する。引数は1つのみです。
|
40
40
|
|
41
|
+
Python では コマンドライン引数は `sys.argv` を使って取得することができます。今回は Python に渡される引数は1つと決まっているので、`sys.argv[1]` で決め打ちで取り出すことができます(sys.argv[0] にはスクリプト自身のパスが入っています)。
|
42
|
+
|
41
43
|
引数にはフルパスが渡されますので、必要に応じてそこからファイル名やディレクトリ名などを取り出すといいでしょう。
|
42
44
|
|
43
45
|
以下はテストのために私が書いたスクリプトです。ドラッグアンドドロップしたファイルと同じディレクトリに test.txt というファイルを作って、そこにファイル名とフルパスを書き込んでいます。
|