我很困惑这个命令在明确地执行变量赋值时会返回什么错误代码并且使用命令替换:
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手册页等权威人士那里看到这一点的参考,请帮我找到它出来,再次感谢!
我正在开发一个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 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中得到修复,任何人都可以帮我找到发生这种情况的真正原因吗?
代码是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) Logstash的grok是一个基于正则表达式构建的字符串解析工具,它提供了许多模式,使字符串解析工作变得更加容易,我第一次使用它时就爱上了它.但不幸的是,它是用Ruby编写的,因此无法在我的Python项目中使用,所以我想知道是否有任何Python实现的grok,或者是否有任何Python替代方案可以像grok一样简化字符串解析?
我正在使用带有neocomplcache插件的Vim,它的使用提示功能虽然完成让我非常困惑.
它表现得像这样:我<C-X><C-U>
在光标结束时键入os.path.
,然后不仅在行下面列出了完成候选,而且包含第一个候选的docstring的水平分割出现在顶部.我的问题是:如何摆脱这个功能,以便我只在没有使用提示的情况下获得代码完成?
python ×5
bash ×1
exit-code ×1
interpreter ×1
linux ×1
logstash ×1
mysql ×1
python-2.7 ×1
python-3.x ×1
regex ×1
shell ×1
sqlalchemy ×1
testing ×1
unit-testing ×1
vim ×1
vim-plugin ×1