python runner.daemonrunner_Python 3.3.4:python-daemon-3K;如何使用跑步者

Struggling to try and get a python daemon to work using Python 3.3.4. Im using the latest version of the python-daemon-3K from PyPi i.e. 1.5.8

Starting point is the following code found How do you create a daemon in Python? code i believe is 2.x Python.

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()

Attempting to run this i get the following error.

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

Any pointer how to translate to work with Python 3.3.4 or a good example of using the runner in python-daemon-3K

Thanks

derek

解决方案

To make the code run in python3 you need to make a change in the DaemonRunner class, you cannot have unbuffered text IO but you can have unbuffered bytes IO so changing the mode to'wb+' will work:

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值