自动将响应发送到Python中的子进程

问题描述 投票:1回答:1

我有一个程序,当从Windows命令提示符运行时,我需要按Enter键以回答许多问题。我正在尝试自动化运行程序并从Python按下Enter的过程。

我的尝试

import subprocess
from time import sleep

p = subprocess.Popen(['bcontroller','login','aws'], stdin=subprocess.PIPE, shell=True)
for _ in range(5):
    sleep(10)
    p.communicate(input=b'\n')

运行此命令时,我首先收到警告:

错误:功能不正确。

然后在大约10秒钟后,subprocess引发错误,该错误将停止执行:

ValueError:写入关闭的文件

有人知道出什么问题了吗?

python subprocess python-3.7
1个回答
0
投票

在with上下文中处理与进程的通信。

以下代码是您发布的代码的改编版,尚未经过正确性测试。

import subprocess
from time import sleep

with subprocess.Popen(
    ['bcontroller', 'login', 'aws'],
    stdin=subprocess.PIPE,
    shell=True,
) as p:
    for _ in range(5):
        sleep(10)
        p.communicate(input=b'\n')
© www.soinside.com 2019 - 2024. All rights reserved.