Py学习  »  John  »  全部回复
回复总数  10
4 年前
回复了 John 创建的主题 » 在Python中如何使用Unix套接字?

正如@greencoptoguy所指出的,您可能希望使用管道,但是如果设置为使用Unix套接字,这里有一个使用StreamRequestHandler的粗略示例:

服务器:

#!/usr/bin/env python3

from socketserver import UnixStreamServer, StreamRequestHandler, ThreadingMixIn
import os

os.unlink("/tmp/test")

class Handler(StreamRequestHandler):
    def handle(self):
        while True:
            msg = self.rfile.readline().strip()
            if msg:
                print("Data Recieved from client is: {}".format(msg))
            else:
                return

class ThreadedUnixStreamServer(ThreadingMixIn, UnixStreamServer):
    pass

with ThreadedUnixStreamServer('/tmp/test', Handler) as server:
    server.serve_forever()

客户:

#!/usr/bin/env python3

import socket
import sys 
import time

with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as client:
    client.connect("/tmp/test")

    while True:
        client.send(b"Client 1: hi\n")
        time.sleep(1)

    client.close()

ThreadingMixIn不是必需的,但它允许您运行两个客户机,并同时接收来自这两个客户机的消息。将客户机代码复制到“client1.py”和“client2.py”,并在client2.py中将“client1”更改为“client2”,同时运行这两个代码,以便在实践中看到这一点。

我不是专家,但听起来虽然管道更有效,但它们的缺点是只有一个程序链接到另一个程序。如果您有多个客户机,并且只有一个服务器,那么Unix套接字(如本文所示)可能是您的最佳选择。

你可以用 eventDataTransform 函数检查事件是否具有所需的用户Id,然后将可编辑属性更改为true。

$('#calendar').fullCalendar({
  header: {
  left: 'prev,next today',
  center: 'title',
  right: 'month,agendaWeek,agendaDay'
},
  events: 'https://fullcalendar.io/demo-events.json?overload-day',
  eventDataTransform: function(event){
  if(event.userId === user.id){
  event.editable=true;
  }
 return event;
}
});

});

编辑:我认为eventRender函数是用来修改元素的。要修改事件,应该使用eventDataTransform函数

5 年前
回复了 John 创建的主题 » 了解docker-compose.yml中容器的主机名

是的,你说得对。

根据 README ,你应该先汇合。

4 年前
回复了 John 创建的主题 » 如何在jquery中进行for循环求和?

例如,

$(document).ready(function(){
  
  arr = $('#cover>div>p').map(function() {
    return $(this).html();
  });
  
var res = 0;
  for (i = 0; i < arr.length; i++) {
    res = res+parseInt(arr[i]);
    $('#resultTotal').html(res);
  }

});
<div id="cover">
  <div class="slider">
    <p class="content">100</p>
  </div>
  <div class="slider">
    <p class="content">200</p>
  </div>
</div>

<div id="resultTotal"></div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
7 年前
回复了 John 创建的主题 » 如何对多个表使用mysql group by和inner join限制记录数

做了一些工作,但是我认为我的解决方案是值得分享的,因为它看起来既优雅又快速。

SELECT h.year, h.id, h.rate 
  FROM (
    SELECT id, 
      SUBSTRING_INDEX(GROUP_CONCAT(CONCAT(id, '-', year) ORDER BY rate DESC), ',' , 5) AS l
      FROM h
      WHERE year BETWEEN 2000 AND 2009
      GROUP BY id
      ORDER BY id
  ) AS h_temp
    LEFT JOIN h ON h.id = h_temp.id 
      AND SUBSTRING_INDEX(h_temp.l, CONCAT(h.id, '-', h.year), 1) != h_temp.l

请注意,此示例是为问题的目的而指定的,并且可以很容易地为其他类似目的进行修改。

5 年前
回复了 John 创建的主题 » pycharm站点包文件夹标记为红色,无法导入模块

尝试检查当前的项目解释器是否正确:您应该看到安装了所有包的python环境的路径。 如图所示。

python interpreter path

5 年前
回复了 John 创建的主题 » Git Bash不显示tildes

我总是使用git bash,但是对于cmd建议,请参见 this StackExchange link 也就是说,您需要通过打开cmd并运行来将代码页更改为utf8 chcp 65001 在commandPromt属性--gt;字体上,将字体更改为“lucida console”。

5 年前
回复了 John 创建的主题 » 如何在Pycharm项目视图中隐藏Venv

您可以排除和隐藏“venv”目录(以及其他排除的目录),如下所示:

  1. 将其标记为排除:右键单击“venv”目录->将目录标记为排除。
  2. 隐藏排除的文件:单击项目视图面板中的小齿轮图标,然后 判定元件 从下拉菜单中选择“显示排除的文件”。
5 年前
回复了 John 创建的主题 » 未能在pycharm中导入numpy python模块

这真的是因为虚拟环境。我在Pycharm项目虚拟环境中指定的位置安装了numpty,它工作正常。我通过打开pycharm->首选项->项目解释器来完成此操作,我看到对于我的项目,配置了以下虚拟环境:

Project Interpreter in PyCharm

我通过来源激活了它 /Users/XXX/PycharmProjects/MachineLearning/venv/bin/activate 然后 pip3 install numpy

另一个选项是将解释器更改为包含已安装的所有包的解释器。

Change interpreter

尝试如下操作:

模式: (?<!\\)([$]+)([^$]*?)\\([^$]*?)(?<!\\)\1 替代: \1\2\\\\\\\\\3\1

使用您提供的测试的示例: https://regex101.com/r/X9lGCF/2

图案粗浅说明:

(?<!\\)([$]+) -匹配并捕获至少一个未捕获的 $ ; (?<!\\) 是一个负面的回顾,以确保 $ 的前面没有反斜杠

([^$]*?)\\([^$]*?) -捕获第一个匹配项之间的文本 $ 序列和相同的初始匹配 $ 序列在 \\

(?<!\\)\1 -重新使用最初匹配的 $ 我们的模式中的顺序(这加强了周围环境 $ 序列长度相同;例如不匹配 $\\$$ )确保最后一个序列也未被捕获。

替换将用周围捕获的文本替换反斜杠(它们已被转义,因此我们使用其中8个来获取4个反斜杠),并且 $ 序列。