在子进程python模块中使用egrep regex

时间:2018-05-29 15:35:48

标签: python-2.7 unix

我需要帮助来使用python子进程模块grep一个正则表达式模式。

例如

cmd = 'egrep "MEMBER xe-.* xe-.*" -h -o /home/temp.txt'

cmd_output,cmd_err = Popen(cmd.split(), stdin=PIPE, stdout=PIPE, stderr=PIPE).communicate()

我理解*不会与Popen一起扩展,因此我尝试使用shell=True,但我无法获得所需的输出。

1 个答案:

答案 0 :(得分:0)

使用shell=True时,您应该将命令作为字符串而不是列表提供:

cmd_output,cmd_err = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE, shell=True).communicate()

当传递列表时,它won't do what you expect

  

在POSIX上,shell = True,shell默认为/ bin / sh。如果args是一个字符串,则该字符串指定要通过shell执行的命令。这意味着字符串的格式必须与在shell提示符下键入时完全相同。这包括,例如,引用或反斜杠转义带有空格的文件名。如果args是一个序列,则第一个项指定命令字符串,并且任何其他项将被视为shell本身的附加参数。

也就是说,它可能更容易,更安全,更便携,更健壮,只需在Python中进行此处理。它有excellent regex capabilities,上面只转换为几行Python代码。