1

抱歉,如果这个问题以前被问过 100 次,很遗憾,如果是的话,我还没有找到它。我正在寻找一个 python 脚本,它将产生一个后台进程并监视它以查看它是否已完成。我已经看到现在建议使用 subprocess.call 的 os.system 命令,但这似乎会阻塞程序,直到进程完成。

我的最终目标是拥有以下内容:

1)程序运行并开始处理sing信息

2) 在程序执行到一半时,它将启动一个需要同时运行的 Windows DOS 程序

3) 程序继续运行并不断处理数据。

4) 程序监视DOS 程序及何时退出,然后发送最终信息。但 DOS 程序必须已退出才能运行此步骤。

如果有人能指出我正确的方向,那就太好了。


更多信息:我正在尝试利用 Securecrt 中内置的 python 处理器。它似乎为程序打开了 CMD 窗口,但它不会打印出任何中间命令(在本例中只是启用),直到我终止子进程。

import os

import subprocess


def Main()

    crt.Screen.Synchronous = True

    VMCOMMAND = '\"C:\\Program Files\\VMWare\\VMware OVF Tool\\ovftool.exe\" ' + '--name=test' + ' C:\\temp\\test.ova' + ' vi://root:test@1.1.1.1'

    from subprocess import Popen


    p = Popen(VMCOMMAND)

    crt.Screen.Send(chr(13))
    crt.Screen.Send("enable" + chr(13))
    crt.Screen.Send("enable" + chr(13))
    crt.Screen.Send("enable" + chr(13))
    crt.Screen.Send("enable" + chr(13))


    returncode = p.wait()

    crt.Screen.Send("should not see enable" + chr(13))

Main ()
4

2 回答 2

1

要检查进程是否在没有实际阻塞的情况下终止,您可以使用subprocess.Popen.poll.

于 2012-02-28T00:48:12.040 回答
1

使用Popen构造函数:

from subprocess import Popen

# start program
p = Popen(["program.exe", "arg1"])
# do other stuff here
# ...
# at the end wait for the program to exit
returncode = p.wait()
# run final step here
于 2012-02-28T01:06:31.770 回答