如何重用子进程

时间:2017-10-28 10:37:59

标签: python powershell subprocess

有一个Windows Python应用程序。 应用程序必须收集有关网络配置的若干数据,以构建内部数据结构。 这个过程现在耗时10秒,几乎无法使用。 这10秒用于创建单独的子进程,这些子进程调用powershell来获取数据。 我认为流程创建在Windows上很重要,所以想重用单个进程来查看它是否有所作为。 我使用的代码类似于:

    if not ps:
        ps = sp.Popen([conf.prog.powershell],
                  stdout=sp.PIPE,
                  stdin=sp.PIPE,
                  universal_newlines=True)

后来:

        ps.stdin.write(' '.join(cmd + ['|', 'select %s' % ', '.join(fields), '|', 'fl', '\n']))
        # ... ps.stdout.read()/readline()

它挂了,所以我一直在寻找其他选择。

他们是:

  1. 在子进程中使用通信以避免任何死锁 - 我不能这样做,因为通信等待进程完成,我不希望进程完成。
  2. 使用pexpect,但它在Windows上并不完全正常,并且使用它时,PowerShell控制台接管了python控制台。
  3. 使用自己的线程进行读/写(受http://eyalarubas.com/python-subproc-nonblock.html启发) - 发送到子进程实例的后续命令不会导致任何操作。
  4. 我找不到任何Python库,除了阅读注册表之外,不使用进程来获取PowerShell数据(COM?)。 我找到的库(netifaces,psutil)没有提供所要求的功能。

    那么,是否有人为上述案例提供了一个有效的代码示例(或者可以提供获取信息的替代方法)?

    Python 2.7,但我认为不重要

    操作系统:Win7 / Win10

    此致 罗伯特

0 个答案:

没有答案