2014-12-16 7 views
5

पाइथन 3.3.4 का उपयोग करके काम करने के लिए एक पायथन डिमन को खोजने और प्राप्त करने के लिए संघर्ष कैसे करें। मैं Pypi से python-daemon-3K के नवीनतम संस्करण का उपयोग कर रहा हूं यानी 1.5.8पायथन 3.3.4: पायथन-डेमन -3K; धावक

प्रारंभ बिंदु निम्न कोड How do you create a daemon in Python? कोड है जो मुझे विश्वास है 2.x पायथन।

import time 
from daemon import runner 

class App(): 
    def __init__(self): 
     self.stdin_path = '/dev/null' 
     self.stdout_path = '/dev/tty' 
     self.stderr_path = '/dev/tty' 
     self.pidfile_path = '/tmp/foo.pid' 
     self.pidfile_timeout = 5 
    def run(self): 
     while True: 
      print("Howdy! Gig'em! Whoop!") 
      time.sleep(10) 

app = App() 
daemon_runner = runner.DaemonRunner(app) 
daemon_runner.do_action() 

इसे चलाने का प्रयास मुझे निम्न त्रुटि मिलती है।

python mydaemon.py start
Traceback (most recent call last): File "mydaemon.py", line 60, in daemon_runner = runner.DaemonRunner(app) File "/depot/Python-3.3.4/lib/python3.3/site-packages/python_daemon_3K-1.5.8-py3.3.egg/daemon/runner.py", line 89, in init app.stderr_path, 'w+', buffering=0) ValueError: can't have unbuffered text I/O

अजगर 3.3.4 या में रनर का उपयोग करने का एक अच्छा उदाहरण के साथ काम करने का अनुवाद करने में कैसे किसी भी सूचक अजगर-डेमॉन-3K

धन्यवाद डेरेक

उत्तर

4

में कोड रन बनाने के python3 आप DaemonRunner कक्षा में एक परिवर्तन करने की आवश्यकता है, तो आप unbuffered पाठ आईओ हो सकता है नहीं, लेकिन आप unbuffered बाइट्स हो सकता है आईओ तो 'wb+' के प्रकार के परिवर्तन से काम करेगा:

class DaemonRunner(object): 

     self.parse_args() 
     self.app = app 
     self.daemon_context = DaemonContext() 
     self.daemon_context.stdin = open(app.stdin_path, 'r') 
     # for linux /dev/tty must be opened without buffering and with b 
     self.daemon_context.stdout = open(app.stdout_path, 'wb+',buffering=0) 
     # w+ -> wb+ 
     self.daemon_context.stderr = open(
      app.stderr_path, 'wb+', buffering=0) 
,210
0

python3 में कोड रन बनाने के आप DaemonRunner कक्षा में एक परिवर्तन करने की आवश्यकता

class DaemonRunner(object): 
    self.parse_args() 
    self.app = app 
    self.daemon_context = DaemonContext() 
    self.daemon_context.stdin = open(app.stdin_path, 'r') 
    self.daemon_context.stdout = open(app.stdout_path, 'w+') 
    self.daemon_context.stderr = open(app.stderr_path, 'w+') 
संबंधित मुद्दे