【发布时间】:2020-02-11 02:13:59
【问题描述】:
我忘记添加了,我必须从 python 调用 shell, 我有一个文件
cat file.txt
b
bb
bbb
如果只有“bb”存在则打印,否则失败,
str=subprocess.check_output('grep bb file.txt || echo 2',shell=True)
print 'str='+str # This always str=bb and an extra line
if (str == 'bb'): # Wish better way like str == '1'
print "Pass"
elif(str == '2') :
print "Fail"
我认为应该有更好的处理方式。
【问题讨论】:
-
您可以尝试将
--quiet添加到您的grep 调用中吗?这应该会抑制 grep 打印匹配行。 -
这是解决问题的真正次优方法。尝试使用 Python,而不是使用 grep。
-
-q (quiet) 抑制所有标准输出(事实上我的是从 python 调用的多阶段 grep shell 命令)
-
@Krishna :您的
grep测试该行是否包含两个连续的b。因此它也匹配bbb。要查找仅包含bb而没有其他内容的行,grep -Fx bb可以完成这项工作。但正如其他几个人已经指出的那样,为这个任务调用子进程是没有意义的,因为你可以在 Python 中轻松地做到这一点。
标签: python shell grep subprocess