布尔检查不符合预期,bash/python



当使用$grep检查$date时,我得到了一个意想不到的结果。我正在使用python和os模块来检查bash命令的输出。

if not

工作,创建当前日期的1个文件。

if

不工作,只创建当天的文件。

我希望如果$date包含我正在寻找的字符串,它将只创建当天的文件,然而相反的情况发生。下面是函数:

def write(self):
    
    #Formatting saved message
    msg = input("Enter a message: ")
    current_time = datetime.now().strftime("%m/%d/%Y | %H:%M")
    x = 'n{0} - {1}n'.format(current_time, msg)
    try:
        #Checking string contained in $date output
        options = (
            'Mon',
            'Tue',
            'Wed',
            'Thu',
            'Fri',
            'Sat',
            'Sun'
            )
        
        for option in options:
            
            #Here is the "if not" in question.
            if not os.system(f'date | grep -q {option}'):
                y = option
                os.system('var=~/reminder_notesn'
                         f'if [ -e $var ]; then echo "Writing to directory: ~/reminder_notes."n'
                        
                          'elsen'
                            'mkdir $var && echo "Created directory: $var"n'
                          'fi'
                        )
                os.system(f'echo "{x}" >> ~/reminder_notes/{y}.txt')
        print('nMessage has been recorded.n')
    except:
        print('nAn error occured.')

在sh/bash中,退出状态为0表示成功(true), 1+表示失败(false)。

在Python中,整数0为假,1+为真。

由于两者对整数的真性有相反的解释,所以检查的结果是相反的。

这是不同语言如何看待成功的一个很好的例子。

如果grep命令成功, date | grep -q {option}返回0,因为Bash(以及整个Linux和Windows)将退出代码为0视为成功,而将0以外的任何代码视为某种失败。然而,在Python中,0被认为等同于False(除0之外的任何值都被认为等同于True)。这就是为什么,如果你让Python考虑Bash命令的真值,它会说&;it 's 0,因此是false &;如果命令成功,将显示&;It's not 0,因此为true &;命令执行失败

HTH !

相关内容

  • 没有找到相关文章

最新更新