我需要帮助来使用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
,但我无法获得所需的输出。
答案 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代码。