首页 > 解决方案 > 如何使用 python 子进程执行命令并响应多个输入?

问题描述

我试图了解如何使用 python 子进程模块执行命令/程序并通过输入来响应提示。

可以接受多个输入的示例程序 Program1.py:

arr1=[]
username = input("Enter your username1 : ")
password = input("Enter your password1 : ")
arr1.append((username,password))
username = input("Enter your username2 : ")
password = input("Enter your password2 : ")
arr1.append((username,password))
username = input("Enter your username3 : ")
password = input("Enter your password3 : ")
arr1.append((username,password))
username = input("Enter your username4 : ")
password = input("Enter your password4 : ")
arr1.append((username,password))

for item in arr1:
    print("username:",item[0],"Password:",item[1])

我编写了另一个名为 Execute_Program1.py 的程序

import subprocess

proc = subprocess.Popen('python Program1.py',stdout=subprocess.PIPE,stderr=subprocess.PIPE,stdin=subprocess.PIPE,shell=True,universal_newlines=True)
print(proc.poll())
while proc.poll() is None:
    print(proc.stdout)
    proc.stdin.write('inputdata\n')

但是这个程序无法执行 Program1.py。我已经阅读了许多与此相关的帖子。根据我得到的信息 proc.poll() return's None 那么 Popen 执行的命令仍然有效。但是我的程序给出了以下输出:

None
<_io.TextIOWrapper name=4 encoding='cp1252'>

我正在使用 Python 3.7.4 版。谁能帮我输入一些我做错的地方?提前致谢。

标签: pythonpython-3.x

解决方案


目前我无法让它与 subprocess 一起工作,但我希望你有一个使用 os 模块的 ASAP 工作解决方案,以防你快速需要它并且不是绝对需要使用 subprocess 模块......

首先将此行添加到 Program1.py 的末尾,不要缩进,以防止在您有机会看到输出之前退出命令窗口:

input("Press <enter> to continue")

接下来,将 Execute_Program1.py 中的整个代码替换为以下内容:

import os
os.system("python Program1.py 1")

这在 win10pro 上的 Python 3.8.1 中运行良好。


推荐阅读