2016-08-28 5 views
0

일부 AppleScript 스크립트를 실행하기 위해 Python을 사용하고 있습니다. "반복"루프에서 화면에 인쇄하고 싶습니다. 나는 현재 뭘하는지의 아래 무식 예는 다음과 같습니다Python을 통해 AppleScripts를 사용하여 터미널에 인쇄

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 

고마워요!

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 

이것은 다음 때문에 빈의 선행 공백주의 (다음 당신에게 줄 것이다 : 당신은 출력이 stderr로가는 괜찮다면

답변

0

는, 다음은 내가 사용하는 가장 쉬운 방법입니다 표준 출력) :

A 
B 
C 

log을 사용하면 당신이 끝날 수 있도록 단지, 표준 출력과 표준 에러를 결합하는 경우 다른 옵션 :

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 사용)을 출력하고, 완료되면 파이썬 출력을 stdout으로 출력하십시오.

관련 문제