小编CQP*_*CQP的帖子

如何使用python-daemon设置守护进程?

如果这是一个新手问题,我是守护进程的新手.

在其他几个答案中(例如,这个问题),人们建议使用python-daemon包,因为它完全实现了PEP 3143标准.

不幸的是,python-daemon 在文档上有点亮(或者更有可能我对知识/经验有点轻视......;)),我想我可能遗漏了一些非常基本的东西.这是我正在做的事情:

我有以下内容:

import daemon

logfile = open('daemon.log', 'w')

context = daemon.DaemonContext(stdout = logfile, stderr = logfile)

context.open()

with context:
    do_something_1()
    do_something_2()
Run Code Online (Sandbox Code Playgroud)

问题:如何使用python-daemon设置守护进程,如何启动并停止它?


附注:

我基本上猜测这个.open()方法应该如何/是否应该在这里使用 - 文档在这一点上并不是很明确.无论我是否包括它,似乎都会发生同样的事情.

所以,现在我该怎么办?当我尝试运行此文件时,例如:

python startConsumerDaemons.py
Run Code Online (Sandbox Code Playgroud)

它似乎运行do_something_1(),但不是第二个.而且,它似乎离开程序连接到终端窗口.IE,stdout没有重定向,当我关闭终端窗口时,进程被终止.所以,我很确定我在这里做错了什么......我应该做些什么呢?

最后,一旦我让守护进程运行,我该如何停止/重启它(例如,如果我对底层代码进行了更改)?

python daemon python-daemon

29
推荐指数
3
解决办法
3万
查看次数

如何为modelForm选择字段更改empty_label?

我在我的一个模型中有一个字段,如下所示:

 payrollProvider = models.CharField(max_length=2, choices=PAYROLL_CHOICES)
 PAYROLL_CHOICES = (
        ('C1', 'Choice1'),
        ('C2', 'Choice2')
        etc.....
                    )
Run Code Online (Sandbox Code Playgroud)

当我为该字段创建模型表单时,Django正确生成HTML选择框,但包含默认空白值"---------".

我想知道如何将此默认值更改为其他文本,例如"请选择值".

我相信我应该可以通过以下方式在我的模型表单的init中设置它,如本答案和其他几个文档中所述:

self.fields['payrollProvider'].empty_label = "please choose value"
Run Code Online (Sandbox Code Playgroud)

但是,这对我不起作用.当我在表单的init中包含该行时,"--------"仍然显示为选择框中的初始选项.我正在粘贴下面的相关forms.py,但似乎其他人也无法访问/修改empty_label.在这个链接中,提问者描述了一种删除默认empty_label值的方法(我能够通过他的方法成功完成),但我真正想做的是修改显示的empty_label.

有任何想法吗?

这是forms.py中表单的代码,其中empty_label代码在更改默认值"----------"时未成功:

class PayrollCredentialForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(PayrollCredentialForm, self).__init__(*args, **kwargs)
        self.fields['payrollUsername'].widget.attrs.update({'class' : 'yp-signup'})
        self.fields['payrollPassword'].widget.attrs.update({'class' : 'yp-signup'})
        self.fields['payrollProvider'].widget.attrs.update({'class' : 'yp-signup'})
        self.fields['payrollUsername'].widget.attrs.update({'placeholder' : '  Payroll Username'})
        self.fields['payrollPassword'].widget.attrs.update({'placeholder' : '  Payroll Password'})
        self.fields['payrollProvider'].empty_label = "please choose value"


class Meta:
    model = Company
    fields = ('payrollProvider', …
Run Code Online (Sandbox Code Playgroud)

django django-forms

17
推荐指数
3
解决办法
2万
查看次数

Django Serializer AttributeError:'unicode'对象没有属性'isoformat'

我正在尝试序列化(自定义)Django用户模型的实例,如下所示:

在models.py中:

Class Employee(User):
    company = models.ForeignKey('Company')
    additionalField1
    additionalField2
    etc....
Run Code Online (Sandbox Code Playgroud)

在上面的Employee模型中,除了从User模型继承的属性之外,我还使用以下模型字段类型:CharField(),NullBooleanField(),IntegerField(),DateField(),DecimalField()

有问题的代码:

employee = Employee()
(snip large amounts of code that sets various attributes for employee)
serializers.serialize("json", [employee, ])
Run Code Online (Sandbox Code Playgroud)

(我已经安装了WadOfStuff的Django完整的串行器插件,顺便说一句,重要的是 - 但在这种情况下我认为它应该默认为标准的Django序列化器,因为在这种情况下我没有使用任何完整的串行器的功能)

在尝试序列化之前,员工__dict__(有几个关键字段是匿名的):

{'status': u'Act', 'last_name': u'Doe', 'payFrequency': u'Mo', '_state':
 <django.db.models.base.ModelState object at 0x15be890>, 'sex': u'M', 'user_ptr_id': 
None, 'is_staff': False, 'isRegistered': False, 'hireDate': u'2012-08-01', 'id': None, 
'date_joined': datetime.datetime(2012, 10, 25, 2, 39, 22, 793015, tzinfo=<UTC>), 
'city': u'San Francisco', 'first_name': u'John', 'zip': u'94114', u'employmentType': 
u'FT', 'company_id': 4, 'compType': u'S', 'is_superuser': False, …
Run Code Online (Sandbox Code Playgroud)

django django-serializer

6
推荐指数
1
解决办法
7978
查看次数

如何找到python中另一个子字符串后出现的第一个子字符串?

Python中的字符串有一个find("somestring")方法,它返回字符串中"somestring"的索引号.

但是,假设我有一个如下字符串:

"$ 5 $ 7 $ 9总费用:$ 35 $ 14"

我想找到字符串"Total Cost" 之后第一次出现'$'的索引- 我希望能够告诉python,搜索'$',从​​索引编号开始"总成本",并返回您找到的第一次出现'$'的索引号(相对于整个字符串).find()方法将返回0,并且在这种情况下rfind()将不起作用.

一种克服这种方式的方法如下:

def findStrAfterStr(myString, searchText, afterText):

    splitString = myString.split(afterText)
    myIndex = len(splitString[0]) + len(afterText) + splitString[1].find(searchText)
    return myIndex

myString = "$5   $7    $9     Total Cost: $35   $14"
searchText = "$"
afterText = "Total Cost"

findStrAfterStr(myString, searchText, afterText)
Run Code Online (Sandbox Code Playgroud)

但似乎应该有一种更简单的方法来做到这一点,我认为可能存在,我只是不知道它是什么.思考?

当我发现自己做了很多这样的事情时,这对切片特别有用:

myString[myString.find("startingSubstr"):myString.find("endingSubstr")]
Run Code Online (Sandbox Code Playgroud)

我自然希望"endingSubstr"成为"startingSubstr"之后出现的那个.

python string string-matching

5
推荐指数
1
解决办法
4782
查看次数

RabbitMQ Shovel插件停留在"启动"状态

RabbitMQ启动很好,但铲子插件状态被列为"开始".

我正在使用以下rabbitmq.config:

每个代理都在单独的AWS实例上运行.远程服务器是windows 2008服务器,本地服务器是Amazon Linux.

[{rabbitmq_shovel,
  [{shovels,
    [{scrape_request_shovel,
      [{sources,      [{broker,"amqp://test_user:test_password@localhost"}]},
       {destinations, [{broker, "amqp://test_user:test_password@ec2-###-##-###-###.compute-1.amazonaws.com"}]},
       {queue, <<"scp_request">>},
       {ack_mode, on_confirm},
       {publish_properties, [{delivery_mode, 2}]},
       {publish_fields, [{exchange, <<"">>},
                         {routing_key, <<"scp_request">>}]},
       {reconnect_delay, 5}
       ]}
      ]
   }]
}].
Run Code Online (Sandbox Code Playgroud)

运行以下命令:

sudo rabbitmqctl eval'habit_shovel_status:status().'

收益:

[{scrape_request_shovel,启动,{{2012,7,11},{23,38,47}}}]

根据这个问题,如果没有在两个经纪人上正确设置用户,可能会导致这种情况.但是,我已经仔细检查过我已经在两台机器上通过rabbitmqctl user_add正确设置了用户 - 甚至尝试使用不同的用户集来确定用户.

我还在远程主机上运行了端口5672的nmap扫描,以验证该端口是否已启动并正在运行.

更新问题未解决,但这似乎是远程服务器连接问题的结果.我在配置文件中将"reconnect_delay"更改为0,以避免铲子无限次重新尝试连接.强烈推荐其他有这个问题的人也这样做,因为它允许你从rabbit_shovel_status中获取错误信息.在我的情况下,我得到以下错误:

[{scrape_request_shovel,
    {terminated,
        {{badmatch,{error,access_refused}},
         [{rabbit_shovel_worker,make_conn_and_chan,1},
          {rabbit_shovel_worker,handle_cast,2},
          {gen_server2,handle_msg,2},
          {proc_lib,init_p_do_apply,3}]}},
    {{2012,7,12},{0,4,37}}}]
Run Code Online (Sandbox Code Playgroud)

rabbitmq

4
推荐指数
1
解决办法
4442
查看次数