6

我正在努力将子进程与 python 一起使用。这是我的任务:

  1. 通过命令行启动一个 api(这应该与在命令行上运行任何参数没有什么不同)
  2. 验证我的 API 已经出现。最简单的方法是轮询标准。
  3. 针对 API 运行命令。当我能够运行新命令时会出现命令提示符
  4. 通过轮询标准输出来验证命令是否完成(API 不支持日志记录)

到目前为止我所做的尝试:
1. 我被困在这里使用 Popen。我明白,如果我使用 subprocess.call("put command here")这个作品。我想尝试使用类似的东西:

import subprocess

def run_command(command):
  p = subprocess.Popen(command, shell=True,
                       stdout=subprocess.PIPE,
                       stderr=subprocess.STDOUT)

我使用的地方,run_command("insert command here")但这什么也没做。

关于 2. 我认为答案应该类似于这里: Running shell command from Python and capture the output,但由于我无法让 1. 工作,我还没有尝试过。

4

2 回答 2

8

至少要真正启动子进程,您必须告诉 Popen 对象真正进行通信。

def run_command(command):
    p = subprocess.Popen(command, shell=True,
            stdout=subprocess.PIPE,
            stderr=subprocess.STDOUT)
    return p.communicate()
于 2013-01-21T12:42:58.950 回答
7

您可以查看Pexpect,这是一个专门为与基于 shell 的程序交互而设计的模块。

例如,启动 scp 命令并等待密码提示,您可以:

child = pexpect.spawn('scp foo myname@host.example.com:.')
child.expect ('Password:')
child.sendline (mypassword)

有关 Python 3 版本,请参阅Pexpect-u

于 2013-01-21T12:56:30.270 回答