小编Dou*_* R.的帖子

覆盖子类中的dict.update()方法以防止覆盖dict键

今天早些时候,我读到了一个问题" 如果python dict理解覆盖了一个键就会引发错误 ",并决定试着回答一下.我自然发生的方法是为此子类化dict.但是,我坚持了我的答案,现在我痴迷于为自己解决这个问题.

笔记:

  • 不 - 我不打算将这个问题的答案作为另一个问题的答案.
  • 在这一点上,这对我来说纯粹是一种智力锻炼.作为一个实际问题,我几乎肯定会使用一个namedtuple或一个常规字典,只要我有这样的要求.

我的(不太正常)解决方案:

class DuplicateKeyError(KeyError):
    pass



class UniqueKeyDict(dict):
    def __init__(self, *args, **kwargs):
        self.update(*args, **kwargs)


    def __setitem__(self, key, value):
        if key in self:  # Validate key doesn't already exist.
            raise DuplicateKeyError('Key \'{}\' already exists with value \'{}\'.'.format(key, self[key]))
        super().__setitem__(key, value)


    def update(self, *args, **kwargs):
        if args:
            if len(args) > 1:
                raise TypeError('Update expected at most 1 arg.  Got {}.'.format(len(args)))
            else:
                try:
                    for k, v in args[0]:
                        self.__setitem__(k, v) …
Run Code Online (Sandbox Code Playgroud)

python dictionary

15
推荐指数
2
解决办法
4393
查看次数

如何安装phpseclib?

我在我的机器上安装了Apache,因此我可以将localhost用作PHP服务器.这样可行.现在我正在尝试使用PHP通过SFTP将文件发送到另一台服务器.我环顾四周,看到了phpseclib的推荐.我似乎无法弄清楚如何安装phpseclib.以下是该网站提供的内容:

set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');
include('Net/SFTP.php');
Run Code Online (Sandbox Code Playgroud)

您必须设置包含路径.

我明白这些词是什么意思,但我无法让它发挥作用.我正在使用mac.我的服务器在/Users/diego/Sites/.我到底需要把phpseclib文件夹放在哪里?我需要在我的php文件中添加哪些行以phpseclib包含在内?

php install phpseclib

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

Python Tkinter:将keypress事件绑定到ttk.Notebook中的Active Tab

摘要

在Python Tkinter应用程序中,使用时ttk.Notebook,如何绑定按键事件,以便仅在包含生成事件的帧的选项卡处于活动状态时触发(即,对于按钮热键,如何仅在按钮时捕获事件在活动标签上)?

详情

我正在编写一个Tkinter应用程序(我的第一个),它使用一个ttk.Notebook对象来管理界面的多个部分.我有多个选项卡,其中一些选项卡上有"相同"按钮,但它们具有不同的操作,具体取决于哪个选项卡处于活动状态(即,一个选项卡上的"保存"按钮仅保存该选项卡中的项目,而不是所有标签).

直观的方法是将事件绑定到帧,然后包含"活动"对象的帧将捕获事件,但这似乎不起作用.但是,如果我将事件绑定到根窗口,则无论选项卡上下文如何,都会调用相同的处理程序.

我认为这是一个常见的要求,但我无法找到有关如何执行此操作的信息.

我使用的是Python 3.4.3.

MCVE

这是一个最小的例子,它展示了我观察到的行为.它生成一个带有五个选项卡的主窗口,每个选项卡都有一个事件绑定Alt-t,它应该触发该选项卡中框架的事件处理程序.

import tkinter as tk
from tkinter import ttk

class MyTab(ttk.Frame):
    """Frame to be added to each tab of the notebook.

    """

    def __init__(self, master, idx, *args, **kwargs):
        super().__init__(master, *args, **kwargs)
        self._button = ttk.Button(self, text='Tab {}'.format(idx),
                                  command=lambda *args, x=idx: self._handle_button(x, *args),
                                  underline=0)
        self.bind('<Alt-t>', lambda *args, x=idx: self._handle_button(x, *args))
        self._button.pack()
        self.pack()


    def _handle_button(self, x, *args):
        print('Button: Tab {}'.format(x))



class MainWdw(ttk.Frame):
    """Main application window.

    """

    def …
Run Code Online (Sandbox Code Playgroud)

python tkinter ttk python-3.x

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

在Powershell 4.0中将PSRemotingJob对象作为参数传递

我正在编写一个Powershell Cmdlet,为此我需要传递一个PSRemotingJob 对象作为参数。该MCVE如下:

function My-Cmdlet {
    [CmdletBinding()]
    Param(
        [Parameter(Position=0,
                   Mandatory=$true,
                   ValueFromPipeline=$true,
                   ValueFromPipelineByPropertyName=$true)]
        [PSRemotingJob[]]$Job
    )

    BEGIN {}

    PROCESS {
        ForEach ($j in $Job) {
            $j
        }
    }

    END {}
}
Run Code Online (Sandbox Code Playgroud)

问题是,当我将作业传递到cmdlet时,出现如下错误:

PS C:\Temp> Invoke-Command -AsJob -CN svr001 -Command {Start-Sleep 10} | My-Cmdlet
My-Cmdlet : Unable to find type [PSRemotingJob]. Make sure that the assembly that contains this type is loaded.
At line:1 char:63
+ Invoke-Command -AsJob -CN svr001 -Command {Start-Sleep 10} | My-Cmdlet
+                                                              ~~~~~~~~~
    + CategoryInfo          : …
Run Code Online (Sandbox Code Playgroud)

powershell

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

Kubernetes:参考之前定义的 ConfigMap 键值对

长话短说

我可以在 ConfigMap 中引用之前定义的键值对吗?

完整版

我正在为一个应用程序编写部署规范,该应用程序在启动时从环境变量中接受其配置。一些环境变量是从其他环境变量派生的。如果我将它们设置为在应用程序启动时获取的文件,我只需执行以下操作:

[me@myserver ~]$ cat ./myenv.sh
export FOO=foo
export BAR=bar
export FOOBAR=$FOO$BAR
[me@myserver ~]$ . ./myenv.sh
[me@myserver ~]$ printenv FOOBAR
foobar
Run Code Online (Sandbox Code Playgroud)

但是,在 ConfigMap 中通过引用先前定义的键值对来执行此操作的类似方法不起作用(请参阅下面的示例 ConfigMap 和 Pod)。结果如下:

[me@myserver ~]$ kubectl create -f my-app-config.yaml -f my-app-pod.yaml
configmap "my-app" created
pod "my-app" created
[me@myserver ~]$ kubectl exec -it my-app -- printenv | grep MY_CONFIGMAP
MY_CONFIGMAP_FOO=foo
MY_CONFIGMAP_FOOBAR=$(MY_CONFIGMAP_FOO)$(MY_CONFIGMAP_BAR)
MY_CONFIGMAP_BAR=bar
Run Code Online (Sandbox Code Playgroud)

的期望值MY_CONFIGMAP_FOOBARfoobar

我尝试在文档中的“在 Pod 命令中使用 ConfigMap 定义的环境变量”下交叉应用以下说明 :

command 您可以使用 Kubernetes 替换语法在 Pod 规范部分中使用 ConfigMap 定义的环境变量 …

docker kubernetes

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

无法从Get-PSDrive中捕获DriveNotFoundException

我无法在以下示例中捕获DriveNotFoundException生成Get-PSDrive的内容:

try {
    # Assumes no Q:\ drive connected.
    $foo = Get-PSDrive -name 'Q' -ErrorAction Stop
}
catch [System.Management.Automation.DriveNotFoundException] {
    Write-Output "Drive not found."
}
catch {
    Write-Output "Something else went wrong."
}
Run Code Online (Sandbox Code Playgroud)

这应该打印以下内容:

PS C:\temp> .\foo.ps1
Drive not found.
PS C:\temp>
Run Code Online (Sandbox Code Playgroud)

相反,我得到:

PS C:\temp> .\foo.ps1
Something else went wrong.
PS C:\temp>
Run Code Online (Sandbox Code Playgroud)

我正在使用Powershell 2.0,如果这是相关的.

powershell

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

Excel If Then Formula

我目前在配方方面遇到麻烦.基本上,我想要一个公式:1)检查D列以查看返回值是否为"是".2)如果是,继续执行LOOKUP公式.这是我到目前为止的公式 - 不幸的是它不起作用.任何帮助将非常感激!

=IF(D19<>YES, VLOOKUP(C19,'Workbench Exported List'!A2:A961, 'Workbench Exported List'!B2:B961), "Not Available")
Run Code Online (Sandbox Code Playgroud)

excel excel-formula

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