पर पृष्ठभूमि में पाइथन चलाना क्या मेरे पायथन स्क्रिप्ट (ओएस एक्स पर पृष्ठभूमि में चल रहे अंतहीन 'जबकि' लूप) को रखने का कोई तरीका है? साथ ही, एक ही उद्देश्य के लिए, क्या यूएसबी ड्राइव पर "ऑटोरन" पायथन लिपि रखने का कोई तरीका है?ओएस एक्स
ओएस एक्स
उत्तर
यदि आप स्क्रिप्ट को एक डिमन प्रक्रिया के रूप में चलाना चाहते हैं जो स्वचालित रूप से प्रारंभ होता है, तो आप 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
स्क्रिप्ट में प्रयोग किया लेबल कुछ भी हो सकता है, लेकिन यह पर अद्वितीय होना चाहिए आपका सिस्टम, इसलिए ऐप्पल आमतौर पर एक उलटा डोमेन नाम का उपयोग करता है।
एक स्क्रिप्ट को स्वत: चलाने के लिए, मुझे नहीं लगता कि ऐसा करने का कोई तरीका है।
बस हमेशा की तरह खोल का उपयोग कर पृष्ठभूमि में अपने अजगर स्क्रिप्ट चलाने:
python myscript.py &
ऑटोरन प्रश्न का सवाल है, यह एक बड़ी सुरक्षा छेद है, तो यह कुछ है कि मैक ओएस एक्स से किया था होगा डिफ़ॉल्ट, तो, नहीं, बिल्कुल नहीं। लेकिन आप आसानी से ऐसी स्क्रिप्ट लिख सकते हैं जिसने उद्देश्य पर कुछ ऐसा लागू किया है: समय-समय पर एक यूएसबी ड्राइव प्लग इन करें, और कुछ भी करें (थंब ड्राइव से दूसरी स्क्रिप्ट भी चलाएं) जब यह प्लग इन हो।
इस प्रश्न को देखें सिस्टम जैसे यूनिक्स पर पाइथन स्क्रिप्ट को डिमोनिज़ करने के तरीकों के लिए: Python Daemon Packaging Best Practices
बेशक आप हमेशा की तरह पृष्ठभूमि में लिपि चला सकते हैं जैसा कि आपको चाहिए।
मैं 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
आप https://linux.die.net/man/1/nohup
nohup उपयोग कर सकते हैं$ nohup python <your_script.py> &
यह आपकी प्रक्रिया को चलाएगा और आउटपुट को उसी निर्देशिका में फ़ाइल nohup.out में जोड़ देगा। & अन्य उत्तरों द्वारा समझाया गया पृष्ठभूमि में स्क्रिप्ट चलाएगा।
मेरा मानना है कि 'स्क्रीन' – Robus