1

私はPythonとAppleScriptに非常に慣れていません。2つのapplescriptを呼び出しているPythonスクリプトがあります。pythonでいくつかのグローバル変数を定義し、applescript 1に渡します。これらの値は、applescripts 1のさまざまな関数によって変更され、pythonスクリプトに戻されてから、それらの値がapplescript2に渡されて使用されます。

私は少しグーグルして、次のことを試しました:

アップルスクリプトで、

on run argv 
    if (item 1 of argv is start with "x") then 
      function1(item1 of argv)
    else 
      function2 (item 1 of argv)
      function3 (item 2 of argv)
 end run

 on function1 (var)
  set var to (something code to get value from interaction with user)
 return var 
 end function1

Pythonスクリプトでimportosimport sys

os.system ('osascript Setup.scpt')
variable1 = sys.argv[1]
variable2 = sys.argv[2]

applescript2では、applescirpt1と同じようなことをしました。

しかし、これはうまくいきませんでした。両方のスクリプトですべてのargvを出力しようとしましたが、値が正しく渡されていないようです。誰かが私にこれについてもっと指示を与えることができますか?ありがとう!

4

2 に答える 2

0

applescriptの「実行中」ハンドラーから何かを返す必要があります。そうしないと、返される結果はコードの最後の行の結果のみになります。だからあなたはこのようなことをしたいと思うでしょう...

on run argv
    set returnList to {}

    if (item 1 of argv starts with "x") then
        set end of returnList to function1(item1 of argv)
    else
        set end of returnList to function2(item 1 of argv)
        set end of returnList to function3(item 2 of argv)
    end if

    return returnList
end run

また、ユーザーに何かを提供してもらいたい場合は、関数が次のようになる必要があります。ダイアログを表示するようにFinderに指示していることに注意してください。これは、Pythonからこれを実行しているためであり、一部のアプリケーションがユーザーの操作を処理しない場合はエラーが発生します。

on function1(var)
    tell application "Finder"
        activate
        set var to text returned of (display dialog "Enter a value" default answer "")
    end tell
    return var
end function1
于 2012-11-22T02:04:41.323 に答える
0

os.system():サブシェルでコマンド(文字列)を実行します。これは、標準C関数system()を呼び出すことによって実装され、同じ制限があります。

への変更sys.stdin, sys.stoutは、実行されたコマンドの環境には反映されません。戻り値は終了ステータスであり、osascript出力ではありません。

subprocess.Popenを使用します:

import os, sys, commands
from subprocess import Popen, PIPE

var1 = sys.argv[1] 
var2 = sys.argv[2] 
(var3, tError) = Popen(['osascript', '/Setup.scpt', var1, var2], stdout=PIPE).communicate()
print var1
print var2
print var3

コマンドはosascript常にを返しますstring。AppleScriptがを返す場合、listPythonの文字列はコンマとスペースで区切られます。

于 2012-11-23T08:39:57.537 に答える