【发布时间】:2018-03-21 14:39:23
【问题描述】:
我有以下输入文件“testFile.txt”:
$ cat testFile.txt
111 // mNx
222 // mNy not nMx
333 // mNz also not nMx
我想获取 mNx 的值,但是其他一些行包含关于 mNx 的 cmets。在 Unix 命令行上使用 grep 来查找正确的行:
$ grep mNx testFile.txt
111 // mNx
222 // mNy not mNx
333 // mNz also not mNx
然而,
$ grep "// mNx" testFile.txt
111 // mNx
好的,到目前为止一切顺利,但我想使用 Python 调用 grep。继this post之后我有
from subprocess import Popen, PIPE
def grep1(inFile, string):
COMMAND = 'grep %s %s' % (string, inFile)
process = Popen(COMMAND, shell=True, stderr=PIPE, stdout=PIPE)
output, errors = process.communicate()
return output
mNx = grep1('testFile.txt', 'mNx')
print mNx
给了
111 // mNx
222 // mNy not mNx
333 // mNz also not mNx
现在如果我改用
mNx = grep1('testFile.txt', '// mNx')
它返回以下内容:
testFile.txt:111 // mNx
testFile.txt:222 // mNy not mNx
testFile.txt:333 // mNz also not mNx
我尝试过"\/\/ mNx"、r"// mNx"、r"\/\/ mNx" 等,但无法重现原生的grep 行为。在我的 Python 字符串中是否有一些东西被转义了?到底是怎么回事?
【问题讨论】:
-
@Inian 感谢您的建议,但这不起作用。
-
您需要的确切值是多少,您需要数字还是整个匹配行?
-
我最终会拆分字符串,但这个问题只要求正确的行:)
-
@Inian 在这种情况下我会做
mNx = int(grep1("testFile.txt", r'"// mNx"').split()[0])。
标签: python bash python-2.7 grep popen