如何使python3x从业力中读取终端输出?

时间:2017-02-18 05:25:14

标签: python

我制作一个剧本作为业力和懒人的laucher。

就像这样:

    # Load a Karma server
        print('\nKarma is loading...\n')
        karma = subprocess.Popen('./karma start', shell=True)

        # delays for 2 seconds for waiting Karma server
        time.sleep(2)

        # Load a headless SlimerJS that points to Karma server
        slimerjs = subprocess.Popen(
            'xvfb-run slimerjs slimerjs-cfg.js > slimerjs.log', shell=True)
        print('\nSlimerJS is running...\n')

它有效,但这有一个很大的问题,任意延迟2秒。我需要它只在业力真正加载后调用slimerjs,这就是我使用延迟的原因。 但业力在控制台上给我一个输出:

18 02 2017 03:11:12.176:WARN [karma]: No captured browser, open http://localhost:9876/

18 02 2017 03:11:12.190:INFO [karma]: Karma v1.3.0 server started at http://localhost:9876/

所以,我可以用这个输出代替2秒的任意延迟,我也需要得到输出知道业力开始的地方

我需要获取服务器路径/位置(http://localhost:9876/)来说出业力正在运行的slimerjs。

我尝试了一些这样的命令:

p = subprocess.Popen(["./karma start"], stdout=subprocess.PIPE)
        out, err = p.communicate()

但是python给我一个错误信息:

FileNotFoundError: [Errno 2] No such file or directory: './karma start'

任何帮助?

1 个答案:

答案 0 :(得分:1)

如果没有shell=True,您需要Popen调用,如下所示:

p = subprocess.Popen(["./karma", "start"], stdout=subprocess.PIPE)

也可以访问该网站:

location = p.stdout.split(' ')[-1]

如果您使用的是python版本> = 3.5,那么您可以使用subprocess.run较新的更高版本的Popen。文档here