solaris10上的python2.4子进程和grep多个文件

2024-04-25 23:20:54 发布

您现在位置:Python中文网/ 问答频道 /正文

有人能通过python2.4子进程方法提供正确的语法来运行下面的grep命令吗?你知道吗

# grep -n down /tmp/support/alarms/SS7Alarms.*
/tmp/support/alarms/SS7Alarms.263:8301:LAES: SS7MGR:  Association Id 2 is down
/tmp/support/alarms/SS7Alarms.264:7733:LAES: SS7MGR:  Association Id 1 is down
/tmp/support/alarms/SS7Alarms.264:7737:LAES: SS7MGR:  Association Id 2 is down
/tmp/support/alarms/SS7Alarms.264:12603:LAES: SS7MGR:  Association Id 1 is down
/tmp/support/alarms/SS7Alarms.264:12607:LAES: SS7MGR:  Association Id 2 is down
/tmp/support/alarms/SS7Alarms.265:6523:LAES: SS7MGR:  Association Id 1 is down
/tmp/support/alarms/SS7Alarms.265:6531:LAES: SS7MGR:  Association Id 1 is down
/tmp/support/alarms/SS7Alarms.267:10349:LAES: SS7MGR:  Association Id 2 is down
/tmp/support/alarms/SS7Alarms.270:11159:LAES: SS7MGR:  Association Id 2 is down
/tmp/support/alarms/SS7Alarms.270:13229:LAES: SS7MGR:  Association Id 2 is down
/tmp/support/alarms/SS7Alarms.271:13041:LAES: SS7MGR:  Association Id 2 is down

我可以得到一个单独的文件:

p = subprocess.Popen(["grep", "-n", "down", "/tmp/support/alarms/SS7Alarms.263"], stdout=subprocess.PIPE)

尝试grep多个文件时失败:

p = subprocess.Popen(["grep", "-n", "down", "/tmp/support/alarms/SS7Alarms.*"], shell=True, stdout=subprocess.PIPE)
>>> Usage: grep -hblcnsviw pattern file . . .

Tags: 文件idsupportisstdoutgreptmpdown
2条回答

在四处寻找了几个小时之后,我放弃了,在stackoverflow上发布了一些文章,只是为了找出几分钟的测试结果。你知道吗

p = subprocess.Popen('grep -n down /tmp/support/alarms/SS7Alarms.*', shell=True, stdout=subprocess.PIPE)

把完整的命令放到一个字符串中就可以了。你知道吗

没有这样的文件/tmp/support/alarms/SS7Alarms.*。必须将每个文件作为单独的参数传递给grep。*在shell中工作的唯一原因是shell将*展开为多个参数,然后再将它们传递给grep。你知道吗

如果要展开globs,请使用glob模块:

import glob

p = subprocess.Popen(
    ["grep", "-n", "down"] + glob.glob("/tmp/support/alarms/SS7Alarms.*"),
    stdout=subprocess.PIPE)

相反,您可以使用shell=True作为Popen的参数,但这可能会导致其他问题。你知道吗

相关问题 更多 >