【问题标题】:python subprocess usepython子进程使用
【发布时间】:2012-03-17 11:58:25
【问题描述】:

对不起,如果这个问题之前被问过 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 ()

【问题讨论】:

  • “一个 Windows DOS 程序”?程序要么适用于 DOS,要么适用于 Windows,没有“Windows DOS 程序”之类的东西。
  • 对不起,Ignacio,这是一个在 Windows 7 上运行的 Windows DoS 程序。该程序基本上是 ovftool 的 cmd 行。
  • OVFTool 不是用于 DoS,而是用于虚拟化。
  • ovftool 有一个 dos 命令行界面,可用于将 OVA/OVF 文件安装到 VM。
  • 不,它没有。这是一个 Windows 程序。

标签: python subprocess secure-crt


【解决方案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

【讨论】:

  • 谢谢。试过了,它没有用。我用更多信息更新了我的原始项目。我没有提到我正在尝试使用 SecureCRT Python 解释器。
  • @ozymandius100:如果您启动其他程序,例如notepad.exe,它是否有效?您是否尝试将'enable\r' 发送到ovftool.exe
  • 有趣....我只是通过启动“notepad.exe”来做到这一点,并且确实可以正常工作。当我运行 ovatool.exe 时它不会(尽管 ovatool 保持一个 cmd 窗口打开)......至于启用......那只是我发送到 Securecrt 的 txt 输出。过程。看起来我需要 shell=False 标志才能使其正常工作。感谢您的所有帮助。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2011-11-03
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 2020-03-28
    • 1970-01-01
    • 2021-02-22
    • 2014-10-11
    相关资源
    最近更新 更多