2010-08-15 14 views

उत्तर

11

this nice article सरल समाधान का सुझाव

cmd = """osascript -e 'tell app "Finder" to sleep'""" 
def stupidtrick(): 
    os.system(cmd) 

हालांकि आज आप subprocess मॉड्यूल बजाय os.system की, निश्चित रूप से उपयोग करेंगे।

appscript सहित कई और जानकारी और विकल्पों के लिए आलेख के page 2 को भी जांचना सुनिश्चित करें।

+0

आप अजगर से गैर तुच्छ एप्पल घटना पटकथा किसी भी तरह का क्या करने जा रहा है, तो आप appscript का उपयोग किया जाना चाहिए। यह अच्छी तरह से डिज़ाइन किया गया, परिपक्व और अच्छी तरह से समर्थित है। –

+0

@Ned, निश्चित रूप से, लेकिन इस तरह के एक सरल, विशिष्ट उद्देश्य के लिए एक सरल बिट सेबस्क्रिप्ट को कॉल करने के लिए, 'osascript -e' और 'subprocess.call' की" बेवकूफ चाल ", जैसा कि लेख के पृष्ठ 1 में सुझाया गया है (ठीक है जैसा कि मैंने उल्लेख किया है लेख पुराने 'ओएस सिस्टम' का उपयोग करता है, लेकिन यह एक विवरण है ;-) पर्याप्त हो सकता है। –

+0

ओह, एलेक्स, मैं निश्चित रूप से * आप * से असहमत नहीं था! –

5

subprocess संस्करण जो एक मूल सेब स्क्रिप्ट को चलाने की अनुमति देता है, जैसा कि उद्धरण और अन्य पात्रों से बचने के बिना मुश्किल हो सकता है। यह here मिली स्क्रिप्ट का सरलीकृत संस्करण है जो पैरामीट्रिजेशन और उचित भागने (पायथन 2.x) भी करता है।

import subprocess 

script = '''tell application "System Events" 
    activate 
    display dialog "Hello Cocoa!" with title "Sample Cocoa Dialog" default button 2 
end tell 
''' 

proc = subprocess.Popen(['osascript', '-'], 
         stdin=subprocess.PIPE, 
         stdout=subprocess.PIPE) 
stdout_output = proc.communicate(script)[0] 
print stdout_output 

नोट: आप एक ही popen उदाहरण के साथ एक से अधिक स्क्रिप्ट को निष्पादित करने की जरूरत है, तो आप proc.stdin.write(script) साथ स्पष्ट रूप से लिखने और क्योंकि communicate() इनपुट और आउटपुट धाराओं बंद हो जाएगा proc.stdout.read() साथ पढ़ने के लिए की आवश्यकता होगी।

+1

पायथन 3 में यह काम नहीं करेगा, एक अतिरिक्त पैरामीटर universal_newlines = पॉप पर सही है। Https://stackoverflow.com/a/45133926/1534775 देखें – gbonetti

0

मैं आउटपुट लोगों मिला ... यहाँ यह निम्नलिखित है:

import subprocess 
import sys 

for i in range(int(sys.argv[1])): 
    ip = str(sys.argv[2]) 
    username = str(sys.argv[3]) 
    pwd = str(sys.argv[4]) 

    script = '''tell application "Terminal" 
     activate 
     do script with command "cd Desktop && python test_switch.py {ip} {username} {pwd}" 
     delay 15 
    end tell 
    ''' 

    proc = subprocess.Popen(['osascript', '-'], 
         stdin=subprocess.PIPE, 
         stdout=subprocess.PIPE) 
    stdout_output = proc.communicate(script.format(ip=ip, username=username, pwd=pwd))[0] 
संबंधित मुद्दे