小编wat*_*ake的帖子

有没有办法使用 atexit 运行 asyncio 协程?

我正在使用`discord.py 开发一个机器人。机器人创建/删除多个频道,并连接到 SQLite 数据库。如果机器人崩溃,我希望它崩溃

  1. 销毁它创建的所有临时语音通道。
  2. 断开与 SQL 数据库的连接。

这是关闭协程:

async def shutdown(self):
    print("Shutting down Canvas...")
    for ch in self.active_channels:
        await client.delete_channel(ch)
    self.db.close()
Run Code Online (Sandbox Code Playgroud)

我尝试过的事情:

# Canv is the interface between the bot and the data we're collecting
atexit.register(canv.shutdown) 
bot.run(TOKEN)
Run Code Online (Sandbox Code Playgroud)
try:
    bot.loop.run_until_complete(bot.start(TOKEN))
except KeyboardInterrupt or InterruptedError:
    bot.loop.run_until_complete(canv.shutdown())
finally:
    bot.loop.close()
Run Code Online (Sandbox Code Playgroud)
from async_generator import asynccontextmanager

@asynccontextmanager
async def cleanup_context_manager():
    try:
        yield
    finally:
        await canv.shutdown()

with cleanup_context_manager():
    bot.run(TOKEN)
Run Code Online (Sandbox Code Playgroud)

这些都没有运行canv.shutdown(),这是一个asyncio.coroutine. 如何确保此代码在每种类型的出口上运行?

我用这篇文章来获取一些信息,我认为它最接近我想要的。

python asynchronous python-asyncio discord.py

6
推荐指数
2
解决办法
1713
查看次数

带有 WSL 的 Pycharm Professional:无法读取使用 ~/.profile 设置的环境变量

我正在编写一个需要重新分配队列的 Django 应用程序,因此我必须使用 WSL 来继续在 Windows 上进行开发。我很高兴地发现 Pycharm Professional 允许您配置 WSL Python 解释器。然而,我的第一个问题是它无法找到任何环境变量。没什么大不了的,这个页面说我可以export从一个名为~/.profile. 我像这样添加它们:

export SECRET_KEY="xxxxx"
export DATABASE_URL="postgres://xxxxx"
Run Code Online (Sandbox Code Playgroud)

但我的 Pycharm 解释器找不到它们,总是抱怨:

 SECRET_KEY = os.environ['SECRET_KEY']
File "/usr/lib/python3.6/os.py", line 669, in __getitem__
  raise KeyError(key) from None
KeyError: 'SECRET_KEY'
Run Code Online (Sandbox Code Playgroud)

但是,如果我打开 Ubuntu bash 终端并运行 Python3,它会正常找到该值。我尝试使用~/.pam_environment./bashrc,但这些都不起作用,即使手动检查也是如此。

如何让 PyC​​harm/WSL 访问我的 WSL 环境变量?

python ubuntu environment-variables pycharm windows-subsystem-for-linux

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

wxPython:将文件拖到窗口中以获取文件路径

我想将文件拖到窗口中并获取文件路径.我试过这样做:

class CSVDropper(wx.FileDropTarget):
  def __init__(self, data):
      wx.FileDropTarget.__init__(self)
      self.data = data

  def OnDropFiles(self, x, y, filenames):
      self.data = filenames
      print self.data
Run Code Online (Sandbox Code Playgroud)

然后在主窗口中:

    # Drag & Drop
    self.csv_path = None
    self.drop_table = CSVDropper(self.csv_path)

    self.SetDropTarget(self.drop_table)
Run Code Online (Sandbox Code Playgroud)

但这没有任何作用.我已经尝试过运行这个教程代码,但它也没有做任何事情.我该如何做到这一点?

python wxwidgets wxpython drag-and-drop filepath

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

这种printf格式是否可行(左对齐符号,零符号)

我正在尝试使用printf来获得以下编程输出:

- 20
- 15
- 10
-  5
   0
+  5
+ 10
+ 15
+ 20
Run Code Online (Sandbox Code Playgroud)

关键规格是:

  • 字段宽度始终为4
  • 标志始终是左对齐的
  • 这个数字总是正确的
  • 零没有迹象

到目前为止,我还没有能够提出一个能给我预期结果的printf语句.我最接近的是:

for(int i = -20; i <= 20; i+=5)
{
    printf("%-+4d \n", i);
}
Run Code Online (Sandbox Code Playgroud)

产生:

-20                                                                                                                              
-15                                                                                                                              
-10                                                                                                                              
-5                                                                                                                               
+0                                                                                                                               
+5                                                                                                                               
+10                                                                                                                              
+15                                                                                                                              
+20                                                                                                                              
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点,而不必做任何繁琐的字符串操作?

c string formatting printf string-formatting

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

TCL中的C-Like数组

我正在将程序从C移植到TCL,我正在尝试实现类似于C中的数组的数据结构.我需要做的两件事是

  • 被订购
  • 允许插入任何索引
  • 从过程返回数组

我会在运行时知道数组的大小,并且整个程序的大小不应该改变(所以它是静态的).是否有适合此法案的数据结构?

如果重要,我正在使用TCL 8.6

编辑:我还需要能够从函数返回数据结构.

c arrays tcl data-structures

2
推荐指数
1
解决办法
139
查看次数

将 Pandas DataFrame 列拆分为 OneHot/Binary 列

我有一个我正在为 SciKit Learn PCA 格式化的 DataFrame 看起来像这样:

datetime |  mood |  activities |  notes

8/27/2017 |  "good" | ["friends", "party", "gaming"] | NaN

8/28/2017 |  "meh" |  ["work", "friends", "good food"] | "Stuff stuff"

8/29/2017 |  "bad" |  ["work", "travel"] |  "Fell off my bike"
Run Code Online (Sandbox Code Playgroud)

...等等

我想把它改成这个,我认为这对机器学习工作会更好:

datetime |  mood |  friends | party | gaming | work | good food | travel |  notes

8/27/2017 |  "good" | True | True | True | False | False | False …
Run Code Online (Sandbox Code Playgroud)

python machine-learning dataframe pandas scikit-learn

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