小编Rob*_*tts的帖子

为什么bash"echo [t]"导致"t"不是"[t]"

对于字符t和值root,会发生这种情况.相当令人困惑

$ echo [s]
[s]
$ echo [t]
t
$ echo [ t ]
[ t ]
$ echo [root]
t
Run Code Online (Sandbox Code Playgroud)

bash

44
推荐指数
4
解决办法
2147
查看次数

json.loads可以忽略尾随逗号吗?

正如提到这个StackOverflow的问题,你都不允许有任何尾随逗号JSON.例如,这个

{
    "key1": "value1",
    "key2": "value2"
}
Run Code Online (Sandbox Code Playgroud)

很好,但是这个

{
    "key1": "value1",
    "key2": "value2",
}
Run Code Online (Sandbox Code Playgroud)

是无效的语法.

由于其他StackOverflow问题中提到的原因,在Python代码中使用尾随逗号是合法的(也许是鼓励?).我正在使用Python和JSON,所以我希望能够在两种类型的文件中保持一致.有没有办法json.loads忽略尾随逗号?

python json python-2.7

28
推荐指数
4
解决办法
9356
查看次数

为什么一个__import__语句会影响下一个语句的有效性?

我正在查看一些带有两个__import__语句的代码,第二个__import__语句不起作用,除非第一个语句已经运行.

目录结构如下:

dir1
 |-__init__.py
 |-subdir1
 |  |-__init__.py
 |  |-file1.py
 |  |-file2.py
 |
 |-subdir2
    |-__init__.py
    |-file1.py
    |-file2.py
Run Code Online (Sandbox Code Playgroud)

代码有两个__import__声明:

m = __import__('dir1.'+subdir1, fromlist=[file1])
...
m = __import__(file2, fromlist=[class_inside_file2])
Run Code Online (Sandbox Code Playgroud)

第一个是有道理的 - 它大致相当于做

from dir1.subdir1 import file1
Run Code Online (Sandbox Code Playgroud)

但允许动态提供子目录和文件.这是第二个声明,我不明白它为何起作用.它看起来应该相当于

from file2 import class_inside_file2
Run Code Online (Sandbox Code Playgroud)

这不应该作为工作file2.pysubdir1,但我的当前工作目录是上面两个层次.此外,所有__init__.py文件都是空的.

正如您所料,第二个import语句失败,ImportError如果它自己运行.但是,在第一个import语句运行后,第二个工作正常.为什么?

python python-import python-2.7

8
推荐指数
2
解决办法
230
查看次数

Python请求不处理仅来自一台机器的丢失中间证书

我正在开发一个运行 CentOS (Linux) 的机器,当尝试访问特定子域进行工作时遇到以下错误:

Traceback (most recent call last):
  ... # My code, relevant call is requests.get(url)
  File "/usr/local/lib/python2.7/site-packages/requests/api.py", line 60, in get
    return request('get', url, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/requests/api.py", line 49, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/requests/sessions.py", line 457, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/lib/python2.7/site-packages/requests/sessions.py", line 569, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/requests/adapters.py", line 420, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: [Errno 1] _ssl.c:504: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Run Code Online (Sandbox Code Playgroud)

根据https://www.digicert.com/help/,子域“没有发送所需的中间证书”(这是 DigiCert 发现的唯一问题)。然而,当我从 Mac …

ssl-certificate python-2.7 python-requests

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

如何使用正则表达式路径设置Kubernetes Ingress规则?

我想在Ingress规则的路径中使用正则表达式,但我无法让它工作.例如:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: cafe-ingress
spec:
  tls:
  - hosts:
    - cafe.example.com
    secretName: cafe-secret
  rules:
  - host: cafe.example.com
    http:
      paths:
      - path: /tea
        backend:
          serviceName: tea-svc
          servicePort: 80
      - path: /coffee
        backend:
          serviceName: coffee-svc
          servicePort: 80
Run Code Online (Sandbox Code Playgroud)

我尝试/t[a-z]a了第一条路径,但是我试过的任何路径都应该匹配正则表达式,这使我进入默认后端而不是我预期的服务.

注意:我正在使用nginx入口控制器,它应该能够支持正则表达式.

regex nginx kubernetes

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

使用带有“with”语句的 Python 队列

是否有Queuewith语句中使用 Python 的标准方法?这就是我希望能够使用它的方式:

import Queue
myqueue = Queue.Queue()
...
...
...
with myqueue as nextItem:
    doStuff(nextItem)
Run Code Online (Sandbox Code Playgroud)

对象没有__enter__or__exit__方法Queue,所以这不起作用。有没有什么语法糖可以让它看起来比这更好?

import Queue
myqueue = Queue.Queue()
...
...
...
try:
    nextItem = myqueue.get()
    doStuff(nextItem)
finally:
    myqueue.task_done()
Run Code Online (Sandbox Code Playgroud)

编辑:我想with在这种情况下使用语句有两个原因。首先,我认为with语句可以帮助我的代码更简洁一些,尤其是当不止一次调用doStuff. 其次,拥有一些简单的东西会很好,我可以养成每次使用的习惯,以确保我不会忘记调用task_done或遇到错误可能导致调用被跳过的情况。

python python-2.7

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

使用 Apport 故障转储调试 Python 程序

我有一个 Python 程序有时会由于“双重释放或损坏”错误而崩溃。我试图找出发生这种情况的地方(可能在我正在使用的众多库之一中),以便我可以防止它崩溃。为此,我启用了核心转储,现在我有一个可以使用的 Apport.crash文件。

这就是我被困的地方。如何将核心转储加载到 gdb 或其他可以让我看到任何可用堆栈跟踪信息的东西?

apport-retrace 看起来很棒,但不会加载,因为.crash文件中没有包:

ERROR: report file does not contain one of the required fields: CoreDump DistroRelease Package ExecutablePath
Run Code Online (Sandbox Code Playgroud)

我也不知道如何将它直接加载到 gdb 中。我已经尝试gdb /usr/bin/python <crashfile>过完整.crash文件、文件的“CoreDump”部分以及“CoreDump”部分的.crashbase64 解码版本。每次我收到此错误时:

<crashfile> is not a core dump: File format not recognized
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以在不需要包的情况下使用 apport-retrace 或者以 gdb 可以使用的方式从崩溃文件中提取核心转储?

core python-2.7 ubuntu-14.04

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

我如何判断 AsyncResult 是否永远不会准备好?

场景 - 我有一个正在分配任务的进程池。但是,如果子进程在运行任务时被终止,则该AsyncResult对象永远不会被标记为就绪。我希望发生的情况是它会被标记为就绪但不成功。

要重现这一点:

>>> import multiprocessing
>>> import time
>>> p = multiprocessing.Pool(processes=1)
>>> result = p.apply_async(time.sleep, args=(1000,))
>>> result.ready()
False
Run Code Online (Sandbox Code Playgroud)

在另一个 shell 中,找到进程 ID 并将其杀死。

>>> result.ready()
False
>>> result.wait(5) # Waits 5 seconds even though subprocess is dead
Run Code Online (Sandbox Code Playgroud)

这是一个问题,因为我有一个线程正在等待作业完成,并且它通常有相当长的超时。如何让result.wait(timeout)通话结束而不需要等待超时?另外,我如何判断它已被放弃,而不仅仅是任务仍在运行但我们已达到超时?

python python-2.7 python-multiprocessing

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

如何替换 gradle 中依赖项的依赖项?

我正在处理一个 Java 项目,该项目使用的库依赖于具有安全漏洞的库。不幸的是,该漏洞库的更新版本没有相同的组。基本上,该库org.reallyuseful.library:usefulstuff:1.0依赖于org.vulnerable.dependency:dependency:1.0,但该漏洞已在 中修复org.secure.dependency:dependency:1.1

在 Gradle 中,我如何告诉usefulstuff:1.0使用org.secure.dependency:dependency:1.1而不是org.vulnerable.dependency:dependency:1.0

java gradle

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

堆栈跟踪中的行号怎么可能是错误的?

我有一个python(版本2.7.6)程序,截至昨晚已经运行了一两天,当时它报告了一些错误。但是,堆栈跟踪明显是错误的。假装我的代码是这样的:

def do_A():
    do_some_stuff()
    do_B()

def do_B():
    do_some_IO_that_could_fail()

def do_C():
    if len('abc'):
        do_D()

def do_D():
    do_other_stuff()

if __name__ == '__main__':
    do_A()
Run Code Online (Sandbox Code Playgroud)

可以失败的任务确实失败了,但是我的堆栈跟踪如下

Traceback (most recent call last):
  File "myfile.py", line 16, in <module>
    do_A()
  File "myfile.py", line 9, in do_A
    if len('abc'):
  File "myfile.py", line 13, in do_B
    do_other_stuff()
  CustomFailureException: "The thing that can fail? It failed."
Run Code Online (Sandbox Code Playgroud)

在我的堆栈跟踪中,“ in ...”部分是合理的,因为它们描述了实际上可以到达我的代码中具有的部分的路径CustomFailureException。行号和它显示的代码是一致的(即说第9行,并且代码在第9行),但这是错误的行。

有谁知道我的堆栈跟踪如何发生?

注意:此特定任务每天晚上运行,并且已经运行了一段时间。它通常成功完成,但是之前失败并给出了正常的堆栈跟踪。昨晚,它始终失败,并始终给出相同的错误堆栈跟踪。

stack-trace python-2.7

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

如何使用 Java NamedParameterJdbcTemplate 查询潜在的空值

这是我如何使用 a 的示例NamedParameterJdbcTemplate

SqlParameterSource params = new MapSqlParameterSource("column1", value1)
                                            .addValue("column2", value2)
                                            .addValue("column3", value3);
List<String> values = namedParameterJdbcTemplate.query("SELECT column4 FROM my_table WHERE column1=:column1 and column2=:column2 and column3=:column3", params, (rs, numRow) -> {
    return rs.getString("column4");
});
Run Code Online (Sandbox Code Playgroud)

这通常工作得很好,但我有一个value2可以为空的情况。然后它不起作用,因为无法正常比较 null

我如何namedParameterJdbcTemplate处理我正在寻找空值的情况?

需要明确的是,要使 SQL 查询正确,它需要评估为WHERE ... and column2 is null ...而不是 WHERE ... and column2=null.

java sql

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

Python内部 - 对象如何知道全局变量?

我最近发现了一些有趣的行为让我想知道对象如何知道存在哪些全局变量.例如,假设我有一个文件"test.py":

globalVar = 1
toDelete = 2

class Test(object):
    classVar = 3

    def runTest1(self):
        print globalVar
        print toDelete
        print missingVar

    def runTest2(self):
        print self.classVar
        print toCreate
        print missingVar
Run Code Online (Sandbox Code Playgroud)

然后在交互式shell中我这样做:

>>> import test
>>> tester = test.Test()
>>> tester.runTest1()
1
2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "test.py", line 10, in runTest1
    print missingVar
NameError: global name 'missingVar' is not defined
>>> tester.runTest2()
3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module> …
Run Code Online (Sandbox Code Playgroud)

python python-module global-variables python-import python-2.7

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

以Pythonic方式选择一个函数

假设我有以下变量:

x
y
Run Code Online (Sandbox Code Playgroud)

和功能:

def runx(x):
    print(x)

def runy(y):
    print (y)

def runxy(x, y):
    print(x + y)

def nonexy():
    print('none')
Run Code Online (Sandbox Code Playgroud)

什么是基于下一个要求选择函数的Pythonic方法:

- 如果value只比y运行func大runy

- 如果value只比x运行func大runx

- 如果value大于两者xy运行funcrunxy

- 如果value不是比这更好的x并且y愚弄功能nonexy

value,x,y可以是任何数量的

例:

x = 4
y = 6
value = 5
Run Code Online (Sandbox Code Playgroud)

这里value只是大于x,所以跑runx(x)

python python-3.x

0
推荐指数
2
解决办法
112
查看次数