如何将命令行输入解析为单独的命令,stdin,stdout和stderr?正则表达式:如何匹配直到字符串a或字符串b?

时间:2019-05-09 22:47:29

标签: python regex

我需要解析运行以下格式命令的日志文件:

ID_Paths = "path\of\dataset\folder"
listing = os.listdir(ID_Paths)
for fold_Path in listing:
    print("NOW input images of new individual... ", fold_Path)
    image_fold = os.listdir(ID_Paths + "\\" + fold_Path)
    for file in image_fold:
        segments = os.listdir(ID_Paths + "\\" + fold_Path + "\\" + file)
        im = ID_Paths + "\\" + fold_Path + "\\" + file + "\\" + segments
        test_image = cv2.imread(im)

某些命令不使用标准输入;有些不使用stdout。

我可以轻松地将cmd分开;我在编写可以给我其他部分的正则表达式时遇到麻烦。

我知道如何匹配直到单个字符串:

How to match "anything up until this sequence of characters" in a regular expression?

在字符串OR或字符串b 之前,我不知道如何进行匹配。

也就是说,我要匹配选项直到<或>或2 >>出现。

尝试以下操作无效。

cmd options < stdin > stdout 2>> stderr

输出:

import re

test = "cmd test1 test2 -c test3 < infile > outfile 2>> err"

optRegex = '.+?(?=>|<|(2>>))'
optRegex = re.compile(optRegex)

stdoutRegex = '>+?(?=>|<|(2>>))'
stdoutRegex = re.compile(stdoutRegex)

# get options
result = optRegex.search(test)
options = result.group()
rest = test[len(options):]
options = options.rstrip()

# get stdout
result = stdoutRegex.search(rest)
stdout = result.group()
rest = rest[len(stdout):]
stdout = stdout.rstrip()


print(options)
print(stdout)
print(rest)

事后看来,使用循环并扫描开始和结束字符可能更容易,但我对正则表达式解决方案感到好奇。

谢谢!

0 个答案:

没有答案