当使用$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 !