python - 如何使用 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 版。谁能帮我输入一些我做错的地方?提前致谢。
解决方案
目前我无法让它与 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 中运行良好。
推荐阅读
- c - 如何在 Linux 中使用 OpenMax 解码 h264 视频?这段代码正确吗?
- mongodb - 如何使用 MongoDB API 在 Azure CosmosDB 上创建插入触发器
- python - 当我尝试调用我的函数时,为什么会出现 NameError?
- c - STM32 USB CDC 操作
- google-sheets - 使用 Google 表格查询功能将多列视为单个实体
- java - 为什么在休眠时对 ID 使用“long”?
- javascript - 将回调转换为 Promise 以下载多个文件
- webpack - Workbox Service Worker 重复加载或不从缓存中读取?
- elasticsearch - 聚合多个字段而不进行子聚合
- vim - 用许多引号将 shell 输出插入 vim