2012-03-01 9 views
11

पर पृष्ठभूमि में पाइथन चलाना क्या मेरे पायथन स्क्रिप्ट (ओएस एक्स पर पृष्ठभूमि में चल रहे अंतहीन 'जबकि' लूप) को रखने का कोई तरीका है? साथ ही, एक ही उद्देश्य के लिए, क्या यूएसबी ड्राइव पर "ऑटोरन" पायथन लिपि रखने का कोई तरीका है?ओएस एक्स

+0

मेरा मानना ​​है कि 'स्क्रीन' – Robus

उत्तर

29

यदि आप स्क्रिप्ट को एक डिमन प्रक्रिया के रूप में चलाना चाहते हैं जो स्वचालित रूप से प्रारंभ होता है, तो आप launchctl और एक प्लेलिस्ट फ़ाइल का उपयोग कर सकते हैं।

उदाहरण के लिए, बॉब एक ​​साधारण अजगर स्क्रिप्ट जो अपने घर निर्देशिका में हर दूसरा एक फाइल करने के लिए शब्द 'foo' लिखते हैं:

#!/usr/bin/env python 
import os 
import time 

while True: 
    os.system('echo " foo" >> /Users/bob/foostore.txt') 
    time.sleep(1) 

, यह एक डेमॉन प्रक्रिया के रूप में चलाने के एक plist फ़ाइल बनाने के लिए , ~/Library/LaunchAgents/com.bobbob.osx.test.plist, सामग्री के साथ:

launchctl load ~/Library/LaunchAgents/com.bobbob.osx.test.plist 
:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd > 
<plist version="1.0"> 
    <dict> 
    <key>Label</key> 
    <string>com.bobbob.osx.test</string> 
    <key>Program</key> 
    <string>/Users/bob/pyfoo.py</string> 
    <key>KeepAlive</key> 
    <true/> 
    </dict> 
</plist> 

फिर एक टर्मिनल से plist लोड करने के लिए launchctl का उपयोग

यह उस स्क्रिप्ट को लोड करेगा और तत्व <key>Program</key> के नीचे तुरंत प्रोग्राम चलाएगा। आप <string> तत्वों की सरणी के साथ <ProgramArguments> नोड का उपयोग कर प्रोग्राम के लिए तर्क भी निर्दिष्ट कर सकते हैं। अधिक जानकारी के लिए देख launchd.plist man page

आप स्क्रिप्ट निकालना चाहते हैं, तो आप launchctl की अनलोड आदेश का उपयोग कर सकते हैं:

launchctl unload ~/Library/LaunchAgents/com.bobbob.osx.test.plist 

स्क्रिप्ट में प्रयोग किया लेबल कुछ भी हो सकता है, लेकिन यह पर अद्वितीय होना चाहिए आपका सिस्टम, इसलिए ऐप्पल आमतौर पर एक उलटा डोमेन नाम का उपयोग करता है।

एक स्क्रिप्ट को स्वत: चलाने के लिए, मुझे नहीं लगता कि ऐसा करने का कोई तरीका है।

1

बस हमेशा की तरह खोल का उपयोग कर पृष्ठभूमि में अपने अजगर स्क्रिप्ट चलाने:

python myscript.py & 

ऑटोरन प्रश्न का सवाल है, यह एक बड़ी सुरक्षा छेद है, तो यह कुछ है कि मैक ओएस एक्स से किया था होगा डिफ़ॉल्ट, तो, नहीं, बिल्कुल नहीं। लेकिन आप आसानी से ऐसी स्क्रिप्ट लिख सकते हैं जिसने उद्देश्य पर कुछ ऐसा लागू किया है: समय-समय पर एक यूएसबी ड्राइव प्लग इन करें, और कुछ भी करें (थंब ड्राइव से दूसरी स्क्रिप्ट भी चलाएं) जब यह प्लग इन हो।

+0

प्रश्न के पहले भाग के लिए ठीक होना चाहिए, लेकिन जब यह बंद हो जाता है तो वह दौड़ना जारी नहीं रहेगा, है ना? – tkbx

+0

हाँ, आप सही हैं। मैंने कभी अपने गोले बंद नहीं किए, इसलिए मैंने उस पर विचार नहीं किया। एक बेहतर विकल्प एक ऐप्पलस्क्रिप्ट एप्लेट हो सकता है जो स्क्रिप्ट लॉन्च करता है। – kindall

2

इस प्रश्न को देखें सिस्टम जैसे यूनिक्स पर पाइथन स्क्रिप्ट को डिमोनिज़ करने के तरीकों के लिए: Python Daemon Packaging Best Practices

बेशक आप हमेशा की तरह पृष्ठभूमि में लिपि चला सकते हैं जैसा कि आपको चाहिए।

0

मैं launchctl की कोशिश की और यह El Capitan में काम नहीं कर सके और छोटे से अधिक के आसपास खोज की है और इस post

टी एल पाया; डॉ

उपयोग कुटिया लाइन #!/usr/bin/env python या #!/path/to/python अपनी स्क्रिप्ट पर

chmod +x test.py 
nohup /path/to/test.py & 
ps ax | grep test.py 
0

आप https://linux.die.net/man/1/nohup

nohup उपयोग कर सकते हैं
$ nohup python <your_script.py> & 

यह आपकी प्रक्रिया को चलाएगा और आउटपुट को उसी निर्देशिका में फ़ाइल nohup.out में जोड़ देगा। & अन्य उत्तरों द्वारा समझाया गया पृष्ठभूमि में स्क्रिप्ट चलाएगा।