2016-08-28 16 views
0

私はいくつかのAppleScriptスクリプトを実行するためにPythonを使用しています。私は "繰り返し"ループ中に画面に印刷することができるようにしたいと思います。私は現在やっているのダウン易しく書き直さ例は次のとおりです。Pythonを使用してAppleScriptを使用して端末に印刷

from subprocess import Popen, PIPE 

##### My applescript script 

scpt = '''                                    
set letters to {"A", "B", "C"}                               
repeat with theLetter in letters                              
    do shell script "echo " & theLetter                            
end repeat                                    
''' 

#### run the script 
p = Popen(['osascript', '-'], stdin=PIPE, stdout=PIPE, stderr=PIPE) 
stdout, stderr = p.communicate(scpt) 
print stdout, stderr 

さて、(この場合は「C」で)それを唯一の最後のエントリは、端末に印刷されます。この方法をやって。すべての反復中に端末に印刷する方法がありますか?私。

A 
B 
C 

ありがとうございます!

答えて

0

あなたがstderrに行くの出力を気にしない場合は、次は私が使う最も簡単な方法です:これは、その後ため、空の先頭のスペースに注意してください(あなたの次を与える

from subprocess import Popen, PIPE 

##### My applescript script 

scpt = ''' 
set letters to {"A", "B", "C"} 
repeat with theLetter in letters 
    log theLetter 
end repeat 
''' 

#### run the script 
p = Popen(['osascript', '-'], stdin=PIPE, stdout=PIPE, stderr=PIPE) 
stdout, stderr = p.communicate(scpt) 
print stdout, stderr 

STDOUT):

A 
B 
C 

logを使用すると、あなたがで終わるので、ちょうど、stdoutとstderrを組み合わせることであれば、他のオプション:

from subprocess import Popen, PIPE, STDOUT 

##### My applescript script 

scpt = ''' 
set letters to {"A", "B", "C"} 
repeat with theLetter in letters 
    log theLetter 
end repeat 
''' 

#### run the script 
p = Popen(['osascript', '-'], stdin=PIPE, stdout=PIPE, stderr=STDOUT) 
stdout, stderr = p.communicate(scpt) 
print stdout 
あなたを与える

:このようもちろん

A 
B 
C 

communicateを使用しているあなたは、画面上の進行状況を表示したい場合、プロセスは、完了すると、それだけであなたに出力を与えるだろう、一つの方法はないのだろうstderrをすべてキャプチャして、AppleScriptでstderr(logを使用)にプリントさせ、終了したらPythonの出力をstdoutに出力します。

関連する問題