对于以下代码:
logger.debug('message: {}'.format('test'))
Run Code Online (Sandbox Code Playgroud)
pylint 产生以下警告:
记录格式插值(W1202):
在日志记录函数中使用%格式并将%参数作为参数传递当日志语句的调用形式为"logging.(format_string.format(format_args ...))"时使用.此类调用应使用%格式,但通过将参数作为参数传递,将插值留给日志记录功能.
我知道我可以关掉这个警告,但我喜欢理解它.我假设使用format()是打印输出语句的首选方法pylint.为什么记录器语句不适用?
我最近在Ubuntu上从Bash切换到了Zsh,我很高兴.但是,有一些我真的很想念,我没有找到如何实现同样的事情.
在Bash中,每当我输入一个长命令并注意到我之前必须运行其他东西时,我只需要将其注释掉,如下所示:
me@home> #mysuperlongcommand with some arguments
me@home> thecommandIhavetorunfirst #and then: then up up
me@home> #mysuperlongcommand with some arguments #I just need to uncomment it!
Run Code Online (Sandbox Code Playgroud)
然而,这种相当复杂的情况并不像以前那样容易解决zsh,因为这样做#mysuperlongcommand会导致:并导致:zsh: command not found: #mysuperlongcommand.
我可以用
:5,12s/foo/bar/g
Run Code Online (Sandbox Code Playgroud)
在第5行和第12行之间搜索foo和替换它bar.我怎么能只在第5行和第12行(而不是在它们之间的行中)这样做?
我试图在非交互式bash shell中使用别名.我已经定义了我的别名~/.bashrc,我已经设置了变量BASH_ENV=~/startUpFile.startUpFile的内容是source ~/.bashrc.
当我执行alias命令时,我可以看到我的别名被识别.但是,如果我尝试使用定义的别名~/.bashrc,Bash无法识别它.它给了我未知的命令错误.
使用TCSH shell可以很容易地执行此操作,因为~/.cshrc始终会读取文件.
有什么想法我怎么能用Bash shell做到这一点?
我经常交互式循环例如我的文件,并希望对所有文件执行特定操作,假设我想重命名所有文件:
for file in $(ls); do mv "$file" "${file}_new"; done
Run Code Online (Sandbox Code Playgroud)
这很好用.但在调用此命令之前,我想看看它实际上做了什么,所以我会在前面添加一个回声
for file in $(ls); do echo mv "$file" "${file}_new"; done
Run Code Online (Sandbox Code Playgroud)
然后它会显示它将调用的所有命令.如果我对他们感到满意,我会删除echo并执行它.
但是,当命令更微妙时可能包括管道或多个命令时,这不再起作用.当然我可以使用,'所以特殊字符不会被解释,但后来我没有参数扩展.我也可以逃避特殊角色,但这会非常繁琐.
我的问题是,最好的方法是什么?我已经阅读了man bash关于该选项的选项-n,该选项执行"读取命令但不执行它们.这可用于检查shell脚本是否存在语法错误.交互式shell会忽略这一点." 这正是我需要的,但我需要它用于交互式shell.注意选项-x或者-v没有帮助,因为它不仅会显示命令,还会调用它,然后它可能已经太晚了.
我set -e前段时间遇到过,我承认我喜欢它.现在,经过一段时间我回来写一些bash脚本.
我的问题是,是否有一些最佳实践何时使用set -e以及何时不使用它(例如小型/大型脚本等)或者我应该使用类似cmd || exit 1跟踪错误的模式?
让 data = [[3,7,2],[1,4,5],[9,8,7]]
假设我想对列表中每个列表的索引的元素求和,比如在矩阵列中添加数字以获得单个列表.我假设数据中的所有列表长度相等.
print foo(data)
[[3,7,2],
[1,4,5],
[9,8,7]]
_______
>>>[13,19,14]
Run Code Online (Sandbox Code Playgroud)
如何迭代列表列表而不会使索引超出范围错误?也许lambda?谢谢!
在具有相当大的ping时间的远程服务器上工作时,语法突然突然显示并且看似随机中断.当发生这种情况时,它看起来像这样:

语法高亮是很好的直到第24行,之后一切都是灰色的.我可以通过随机滚动或关闭打开vim来修复它.但我既不能重现问题,也不能重现修复.
当我使用完全相同版本的vim和完全相同的.vimrc时,这不会发生.因此我怀疑服务器上有问题.特别是我怀疑由于ping时间长(~170 ms)可能会出现问题.
有没有人看到类似的行为?
我想要实现的是在函数内创建一个本地函数.同时,本地函数不会覆盖外部函数.下面是一个简单函数和带有参数的嵌套函数的示例,用于说明我的问题.
#!/bin/bash
usage() #<------------------------------- same function name
{
echo "Overall Usage"
}
function_A()
{
usage() #<--------------------------- same function name
{
echo "function_A Usage"
}
for i in "$@"; do
case $i in
--help)
usage
shift
;;
*)
echo "flag provided but not defined: ${i%%=*}"
echo "See '$0 --help'."
exit 0
;;
esac
done
}
function_A --help
usage
Run Code Online (Sandbox Code Playgroud)
这是输出.
function_A Usage
function_A Usage
Run Code Online (Sandbox Code Playgroud)
但我想要的是
function_A Usage
Overall Usage
Run Code Online (Sandbox Code Playgroud)
是否可以在不改变其(功能)名称和顺序的情况下实现?请?
注意:我尝试了local usage()但似乎不适用于功能.
我只是SSH-ED一些远程服务器,发现stdout和stderr所有命令/进程的我试图在bash运行被重定向到某个地方.所以,我有以下问题
如何检测:
1)哪个文件stdout,stderr是beeing在Linux中重新路由?
和
2)如何默认重新路由stdout并stderr返回/ dev/tty?
先感谢您.