2016-08-28 2 views
0

Ich verwende Python, um einige AppleScript-Skripts auszuführen. Ich würde gerne in der Lage sein, in einer "Wiederholungsschleife" auf dem Bildschirm zu drucken. Ein verdummtes Beispiel dafür, was ich derzeit tue ist:Drucken an Terminal mithilfe von AppleScript durch Python

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 

Jetzt ist es auf diese Weise nur der letzte Eintrag zum Terminal gedruckt wird dabei (in diesem Fall „C“). Gibt es eine Möglichkeit, dass ich es während jeder Iteration an das Terminal drucken kann? I.e.

A 
B 
C 

Vielen Dank!

Antwort

0

Wenn Sie nicht über die Ausgabe geht nach stderr ausmacht, dann wird die folgende ist die einfachste Art und Weise, die ich benutze:

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 

Dies wird Ihnen dann die folgenden (beachten Sie den führenden Platz wegen der leeren stdout):

A 
B 
C 

Die andere Option, wenn log Verwendung ist nur stdout und stderr zu kombinieren, so dass Sie am Ende mit:

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 

Geben Sie:

A 
B 
C 

Natürlich, da dies communicate verwendet, ist, wird es nur geben Sie den Ausgang, wenn der Prozess abgeschlossen ist, wenn Sie den Fortschritt auf dem Bildschirm zeigen wollte, wäre eine Möglichkeit, um nicht Capture Stderr überhaupt, und lassen Sie das AppleScript in stderr (mit log), und Ihre Python-Ausgabe zu stdout, wenn es fertig ist.

Verwandte Themen