使用Python搜索外部.exe的输出

时间:2014-12-09 09:50:30

标签: windows python-2.7

我正在尝试使用Python围绕外部.exe文件构建一个“包装器”。该文件在运行时将回复如下内容:

Ignoring profile '\\MachineName\C$\Users\UserName1' (reason: directory inclusion)
Ignoring profile '\\MachineName\C$\Users\UserName2' (reason: directory inclusion)

The following user profiles match the deletion criteria:

\\MachineName\C$\Users\UserName3

可以有任意数量的被忽略的配置文件和任意数量的匹配配置文件或无。 我想知道的是,我可以让Python搜索此exe的输出,然后如果有匹配的配置文件则执行其他操作吗?

运行exe的代码很简单:

subprocess.Popen(c:\delprof2\DelProf2.exe /l, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

谢谢!

1 个答案:

答案 0 :(得分:0)

# Python 2.7
import subprocess

def extractProfiles(source):
  result = []
  for line in source:
    line = line.strip()
    if not line: continue
    result.append(line)

profiles = []
proc = subprocess.Popen(....)
for line in proc.stdout:
  if line.strip() != 'The following user profiles match the deletion criteria:':
    continue
  profiles = extractProfiles(proc.stdout)
  break

# now do something with the profiles

一些警告:

  • 上面的内容有点脆弱,因为它正在寻找何时开始记住配置文件("以下用户配置文件......")的输出中的完全匹配子流程。如果您不确定它是否正好是该字符的字符,那么使用re模块和正则表达式来查找它可能是值得的。

  • 以上假设"匹配"在看到触发句子后,配置文件是子进程输出中出现的唯一内容("以下用户配置文件......")。如果情况并非如此,您必须做一些事情来检测用于发送配置文件列表末尾的分隔符。