小编ska*_*sie的帖子

为什么在执行'unittest.main()'之后python不执行任何操作?

所以,假设我有以下内容:

import unittest

class MyTests(unittest.TestCase):

  def test001(self):
    print 'This is test001'

  def test002(self):
    print 'This is test002'

if __name__ == '__main__':
  unittest.main()
  print 'Done'
Run Code Online (Sandbox Code Playgroud)

输出是:

>> This is test001
>> This is test002
>> ----------------------------------------------------------------------
>> Ran 2 tests in 0.001s

>> OK
Run Code Online (Sandbox Code Playgroud)

我想知道为什么不打印"完成"(或任何后来的东西)?

python testing unit-testing python-unittest

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

os.path.join()如何工作?

请帮我理解内置的os.path.join()函数是如何工作的.例如:

import os
print os.path.join('cat','dog') # 'cat/dog' no surprise here
print os.path.join('cat','dog').join('fish') # 'fcat/dogicat/dogscat/dogh'
Run Code Online (Sandbox Code Playgroud)

在Mac上(我猜Linux也是)os.name是posixpath的别名.所以查看posixpath.py模块,join()函数如下所示:

def join(a, *p):
"""Join two or more pathname components, inserting '/' as needed.
If any component is an absolute path, all previous path components
will be discarded.  An empty last part will result in a path that
ends with a separator."""
path = a
for b in p:
    if b.startswith('/'):
        path = b
    elif path == '' or path.endswith('/'):
        path +=  b
    else:
        path += …
Run Code Online (Sandbox Code Playgroud)

python macos path built-in

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

Python unittest,只有在测试失败时才做某事

当使用unittestpython 3中的库时,我只想在测试失败时做一些操作(但这应该在类级别,所以我不必为每个测试编写它).例如,当使用表现时,有类似的东西:

def after_step(context, step):
    if step.status == "failed":
        ...
Run Code Online (Sandbox Code Playgroud)

是否有类似的unittest库,如果没有,最简单的方法是做类似的事情?

python unit-testing

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

是否将过多的参数传递给构造函数被认为是反模式?

我正在考虑使用factory_boy库进行API测试.文档中的一个例子是:

class UserFactory(factory.Factory):
    class Meta:
        model = base.User

    first_name = "John"
    last_name = "Doe"
Run Code Online (Sandbox Code Playgroud)

对于这项工作,我们需要的first_name,last_name等被作为参数传递__init__()的方法base.User() class.但是,如果您有许多参数,则会导致以下情况:

class User(object):

    GENDER_MALE = 'mr'
    GENDER_FEMALE = 'ms'

    def __init__(self, title=None, first_name=None, last_name=None, is_guest=None,
             company_name=None, mobile=None, landline=None, email=None, password=None,
             fax=None, wants_sms_notification=None, wants_email_notification=None,
             wants_newsletter=None, street_address=None):

        self. title = title
        self.first_name = first_name
        self.last_name = last_name
        self.company_name = company_name
        self.mobile = mobile
        self.landline = landline
        self.email = email
        self.password = password
        self.fax = fax
        self.is_guest = is_guest
        self.wants_sms_notification …
Run Code Online (Sandbox Code Playgroud)

python factory-boy

7
推荐指数
3
解决办法
8112
查看次数

Behave测试运行器在Jenkins上没有彩色输出

我在EC2实例上的Ubuntu服务器14.04上设置了jenkins.我有一些硒测试,我用它behave作为测试运行器.

在Jenkins上我也安装了插件AnsiColor,希望我可以在jenkins控制台上获得颜色输出,但是除了Gherking语法之外,我得到了其他一切的颜色.Selenium错误,python调试,一切都有颜色...... 除了表现的输出.

现在的问题是,如果我在Mac或Ubuntu上运行测试而不是Jenkins用户,一切正常,颜色就在那里.

我真的没有任何代码可以发布,但我可以说我试图无效:

  • 跑步表现 behave --color
  • 将AnsiColorPlugin的颜色映射映射到中找到的行为的转义序列 formatter/ansi_escapes.py
  • 添加#!/bin/bash到jenkins构建脚本以确保它不会被执行sh而不是bash

如果这与我有任何关联,我正在使用python 3.4 virtualenv

除了实际的答案,任何有关如何调试这个的建议也是受欢迎的!谢谢

python bash ansi jenkins

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

杀死子进程后外壳挂起

我知道在 SO 上有很多类似的问题,比如这个这个,也许还有更多,但似乎没有一个适用于我的特定情况。我对subprocess.Popen()工作原理缺乏了解也无济于事。

我想要实现的是:启动一个子进程(一个命令行收音机播放器),它也向终端输出数据,也可以接收输入——等待一段时间——终止子进程——退出shell。我在 OSX 10.9 上运行 python 2.7

案例 1. 这将启动广播播放器(但仅限音频!),终止进程,退出。

import subprocess
import time

p = subprocess.Popen(['/bin/bash', '-c', 'mplayer http://173.239.76.147:8090'],
                     stdin=subprocess.PIPE, stdout=subprocess.PIPE, shell=False,
                     stderr=subprocess.STDOUT)
time.sleep(5)
p.kill()
Run Code Online (Sandbox Code Playgroud)

案例 2. 这将启动收音机播放器,输出诸如收音机名称、歌曲、比特率等信息并接受输入。它终止子进程,但它从不存在 shell,即使使用“Ctrl-C”,终端也无法使用。

p = subprocess.Popen(['/bin/bash', '-c', 'mplayer http://173.239.76.147:8090'],
                     shell=False)
time.sleep(5)
p.kill()
Run Code Online (Sandbox Code Playgroud)

关于如何做到这一点的任何想法?我什至在想,如果没有其他选择,是否有可能为子进程打开一个slave-shell(当然这也是我不知道的事情)。谢谢!

python subprocess

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

无法在virtualenv中使用pip安装html包

在我的根项目文件夹中,我使用以下命令为python 3.4创建了一个虚拟环境:

$ virtualenv -p /Library/Frameworks/Python.framework/Versions/3.4/bin/python3.4 venv
$ source venv/bin/activate
Run Code Online (Sandbox Code Playgroud)

现在我想为这个项目安装一些带有pip的软件包,我这样做:

$ venv/bin/pip install html
Run Code Online (Sandbox Code Playgroud)

我得到以下错误(完全回溯,除了我已用'...'替换路径):

Collecting html
  Using cached html-1.16.tar.gz
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<frozen importlib._bootstrap>", line 2218, in _find_and_load_unlocked
    AttributeError: 'module' object has no attribute '__path__'

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
      File "<string>", line 3, in <module>
      File ".../venv/lib/python3.4/site-packages/setuptools/__init__.py", line 11, in <module>
        from setuptools.extension import Extension
      File ".../venv/lib/python3.4/site-packages/setuptools/extension.py", line …
Run Code Online (Sandbox Code Playgroud)

python pip virtualenv

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

添加新元素后,lxml 库不会向树添加换行符或缩进

标题是不言自明的,在将其标记为重复之前,请考虑我已经检查了这个答案,它对我不起作用,因为我什至不仅在sys.stdout写入文件时没有获得正确的格式。所以我有以下 xml ( test.xml ):

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://www...">
  <soap:Body>
    <SubmitTransaction xmlns="http://www.">
      <Authentication>
      </Authentication>
      <Transaction>
        <DataFields>
        </DataFields>
      </Transaction>
    </SubmitTransaction>
  </soap:Body>
</soap:Envelope>
Run Code Online (Sandbox Code Playgroud)

以及以下代码:

from lxml import etree

parser = etree.XMLParser(remove_blank_text=True)
tree = etree.parse("test.xml", parser)

def get_data_fields():
    for node in tree.iter():
        if 'DataFields' in node.tag:
            return node
a = get_data_fields()
field = etree.Element('Field_1')
child_1 = etree.Element('FieldName')
child_2 = etree.Element('FieldValue')
child_3 = etree.Element('FieldIndex')
child_1.text = 'dateTime'
child_2.text = '2016-07-29T12:00:00'
child_3.text = '1'

for i in [child_1, child_2, child_3]: …
Run Code Online (Sandbox Code Playgroud)

python xml lxml

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

使用 pythoncom 在 Python 进程之间封送 COM 对象

我希望有人可以帮助我从 Python 对 Excel 进行编组的跨进程调用。

我有一个通过 Python 启动的 Excel 会话,我知道它会在需要从单独的 Python 进程访问时启动并运行。我使用编组CoMarshalInterfaceInStream()CoGetInterfaceAndReleaseStream()来自 pythoncom 模块的调用使一切正常工作,但我需要重复访问流(在我的情况下我只能设置一次),并且CoGetInterfaceAndReleaseStream()只允许一次访问接口。

我相信,我想实现是可以做到的是什么CreateStreamOnHGlobal()CoMarshalInterface()CoUnmarshalInterface()但我无法得到它的工作,几乎可以肯定,因为我不是在正确的参数传递。

我没有详细描述我的主要场景,而是设置了一个简单的示例程序,如下所示 - 显然这发生在同一过程中,但一次一个步骤!以下代码段工作正常:

import win32com.client
import pythoncom

excelApp = win32com.client.DispatchEx("Excel.Application")

marshalledExcelApp = pythoncom.CoMarshalInterThreadInterfaceInStream(pythoncom.IID_IDispatch, excelApp)

xlApp = win32com.client.Dispatch(
                                pythoncom.CoGetInterfaceAndReleaseStream(marshalledExcelApp, pythoncom.IID_IDispatch))

xlWb = xlApp.Workbooks.Add()
xlWs = xlWb.Worksheets.Add()
xlWs.Range("A1").Value = "AAA"
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试以下操作时:

import win32com.client
import pythoncom

excelApp = win32com.client.DispatchEx("Excel.Application")

myStream = pythoncom.CreateStreamOnHGlobal()                                   
pythoncom.CoMarshalInterface(myStream,
                             pythoncom.IID_IDispatch,
                             excelApp,
                             pythoncom.MSHCTX_LOCAL,
                             pythoncom.MSHLFLAGS_TABLESTRONG)   

myUnmarshaledInterface = pythoncom.CoUnmarshalInterface(myStream, pythoncom.IID_IDispatch)
Run Code Online (Sandbox Code Playgroud)

调用时出现此错误(我认为与第三个参数有关)pythoncom.CoMarshalInterface()

"ValueError: argument …
Run Code Online (Sandbox Code Playgroud)

python com excel marshalling pythoncom

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

使用 Overpass API 查找坐标周围的多个标签

鉴于此立交桥查询https://overpass-turbo.eu/s/Sle,它搜索博物馆和画廊,我如何引入一种新型标签来搜索同一位置,例如我还想搜索node["amenity"~"cafe|bar"]周围同一区域(周围500米lat: 500,53.866444lon: 10.684738我尝试过的所有操作要么引发错误,要么返回不完整的结果。例如,以下内容有效,但仅返回 caf\xc3\xa9s 和酒吧,但不返回博物馆。

\n\n
[out:json];\n  node["tourism"~"museum|gallery"](around:500,53.866444, 10.684738);\n  node["amenity"~"cafe|bar"](around:500,53.866444, 10.684738);\n  out center;\n
Run Code Online (Sandbox Code Playgroud)\n

openstreetmap overpass-api

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