小编Reo*_*orx的帖子

退出Bash中命令替换的变量赋值代码

我很困惑这个命令在明确地执行变量赋值时会返回什么错误代码并且使用命令替换:

a=$(false); echo $?
Run Code Online (Sandbox Code Playgroud)

它输出1,让我认为变量赋值不会扫描或产生最后一个错误代码.但是当我尝试这个时:

false; a=""; echo $?
Run Code Online (Sandbox Code Playgroud)

它输出0,显然这是a=""返回和它覆盖1返回的false.

我想知道为什么会发生这种情况,变量赋值中是否存在与其他正常命令不同的特殊性?或者只是因为a=$(false)被认为是一个命令,只有命令替换部分才有意义?

- 更新 -

谢谢大家,从答案和评论中我得到了"当您使用命令替换分配变量时,退出状态是命令的状态." (由@Barmar提供),这个解释非常清晰易懂,但对于程序员来说说话不够精确,我想从TLDP或GNU手册页等权威人士那里看到这一点的参考,请帮我找到它出来,再次感谢!

linux bash shell exit-code

48
推荐指数
3
解决办法
4万
查看次数

Python CLI程序单元测试

我正在开发一个python命令行界面程序,我在测试时发现它很无聊,例如,这里是程序的帮助信息:

usage: pyconv [-h] [-f ENCODING] [-t ENCODING] [-o file_path] file_path

Convert text file from one encoding to another.

positional arguments:
  file_path

optional arguments:
  -h, --help            show this help message and exit
  -f ENCODING, --from ENCODING
                        Encoding of source file
  -t ENCODING, --to ENCODING
                        Encoding you want
  -o file_path, --output file_path
                        Output file path
Run Code Online (Sandbox Code Playgroud)

当我对程序进行更改并想要测试某些内容时,我必须打开一个终端,输入命令(带有选项和参数),输入enter,然后查看运行时是否发生任何错误.如果确实发生了错误,我必须回到编辑器并从头到尾检查代码,猜测bug的位置,进行小的更改,写print行,返回终端,再次运行命令......

递归.

所以我的问题是,使用CLI程序进行测试的最佳方法是什么,它可以像使用普通python脚本进行单元测试一样简单吗?

python testing unit-testing command-line-interface

20
推荐指数
4
解决办法
7545
查看次数

Python"is"语句:比较未绑定方法时的意外行为

在Python 2.7.9中,当我将未绑定方法分配给新属性并按is语句进行比较时,结果为False:

In [1]: class A(object):
   ...:     def a(self):
   ...:         pass
   ...:

In [2]: A._a = A.a

In [3]: print A.a, A._a
<unbound method A.a> <unbound method A.a>

In [4]: print id(A.a), id(A._a)
4499595904 4499595904

In [5]: A.a is A._a
Out[5]: False
Run Code Online (Sandbox Code Playgroud)

这是非常反直觉的,我找不到任何参考或文档来解释这种行为.更重要的是,当我在Python 3.4.2中测试相同的代码时,结果变成了True.我猜这是Python 2.7中的一个错误,但在Python 3中得到修复,任何人都可以帮我找到发生这种情况的真正原因吗?

python interpreter python-2.7 python-3.x

11
推荐指数
0
解决办法
63
查看次数

SQLAlchemy在删除表时被阻止

代码是sqlahcmey的orm教程的逐步复制,除了最后一行,我打算在查询后删除所有表.但程序阻塞Base.metadata.drop_all(bind=engine),下面是MySQL的状态(取自MySQL Workbench):

工作台管理员

由于标线显示,删除表的过程被绞死由于 table metadata lock,我建议元数据锁由引起的result = session.query(User).all(),因为如果该行移除该程序没有阻止,但我还是不知道原因.所以我的问题是:为什么会发生这种情况,如何避免阻塞

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String


Base = declarative_base()


class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String(16))
    fullname = Column(String(16))
    password = Column(String(16))

    def __init__(self, name, fullname, password):
        self.name = name
        self.fullname = fullname
        self.password = password

    def __repr__(self):
        return "<User('%s','%s', '%s')>" …
Run Code Online (Sandbox Code Playgroud)

python mysql sqlalchemy

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

是否有logstash的grok功能的Python实现?

Logstash的grok是一个基于正则表达式构建的字符串解析工具,它提供了许多模式,使字符串解析工作变得更加容易,我第一次使用它时就爱上了它.但不幸的是,它是用Ruby编写的,因此无法在我的Python项目中使用,所以我想知道是否有任何Python实现的grok,或者是否有任何Python替代方案可以像grok一样简化字符串解析?

python regex string-parsing logstash

5
推荐指数
2
解决办法
3599
查看次数

Vim neocomplcache:禁用使用提示

我正在使用带有neocomplcache插件的Vim,它的使用提示功能虽然完成让我非常困惑.

它表现得像这样:我<C-X><C-U>在光标结束时键入os.path.,然后不仅在行下面列出了完成候选,而且包含第一个候选的docstring的水平分割出现在顶部.我的问题是:如何摆脱这个功能,以便我只在没有使用提示的情况下获得代码完成?

在此输入图像描述

python vim vim-plugin neocomplcache

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