首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何从用户获取输入,并将其传递给由python中的子进程调用触发的交互式命令行程序?

在Python中,可以使用subprocess模块来调用子进程并与其进行交互。下面是一种从用户获取输入并将其传递给子进程的示例方法:

代码语言:txt
复制
import subprocess

def run_command(command):
    # 启动子进程,并将stdout和stderr重定向到管道
    process = subprocess.Popen(command, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)

    # 循环读取用户输入,并将其传递给子进程
    while True:
        # 从用户获取输入
        user_input = input("请输入命令:")

        # 将输入发送给子进程
        process.stdin.write(user_input.encode())
        process.stdin.write(b'\n')
        process.stdin.flush()

        # 从子进程读取输出
        output = process.stdout.readline().decode().strip()

        # 输出子进程的响应
        print(output)

        # 检查子进程是否已经结束
        if process.poll() is not None:
            break

    # 获取子进程的输出
    output, error = process.communicate()

    # 输出子进程的错误信息
    if error:
        print(error.decode())

# 调用交互式命令行程序
run_command("python interactive_program.py")

上述代码会启动一个交互式的命令行程序,并从用户获取输入。用户的输入会被传递给子进程,并等待子进程的输出。子进程的输出会被打印到控制台,并且用户可以继续输入新的命令。

需要注意的是,该方法使用subprocess.Popen函数启动子进程,并使用stdin.write()方法向其发送用户输入。同时,通过process.stdout.readline()方法从子进程的输出中读取一行。此外,还需要使用process.communicate()方法来获取子进程的输出和错误信息。

这是一个基本的示例,实际的情况可能因具体的需求而有所不同。你可以根据自己的情况对代码进行修改和扩展。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Linux:进程替换

(2)找到程序下一个问题就是我们要如何去执行这个程序,所以就设计到了要不要涵盖选项,以及这个选项应该以vector形式还是list形式。 (3)这个程序我一定要用该进程环境变量吗??...加载器理解: argv这个参数会被传递给ls,其实exec系列接口含义也是如此,在命令行参数,有所进程都是bash进程,所以exec其实就是一个代码级别的加载器,他可以做到将可执行程序代码和数据导入到内存...(1)任何语言都有像exec这类接口 (2)语言可以互相调用原因是 无论是什么语言写程序 在操作系统看来都是进程 1.5.3 将命令行参数和环境变量传递给另一个程序  环境变量是在进程创建时候就默认继承了...二、自定义Shell 2.1 命令行提示 首先我们需要有  用户名、主机名、当前路径、命令行提示符     (1)用户名+主机名——>用getenv环境变量获取 (2)当前路径 ——>用getcwd(...、本地变量表、内建命令方法…… 当我们输入指令执行解析时候,对于内建命令直接调用函数,非内建命令用进程执行,执行过程获取进程退出码,父进程等待,然后最后可以将退出码赋予给lastcode,这样方便用户通过

12210

【Linux】从零开始手搓 Shell (超详解)

执行命令 } return 0; } 具体思路 》shell读取新一行输入,建立一个新进程,在这个进程运行程序 等待这个进程结束。...,谁来解析,又是如何递给 进程 实际上是 shell 帮我们做解析,形成这个表,然后再进行程序替换,然后直接用 execp 形式执行程序, 并把这个表传给对应进程。...(2)外部命令是 linux 系统实用程序部分,因为实用程序功能通常都比较强大,所以其包含程序量也会很大,在系统加载时并不随系统一起被加载到内存,而是在需要时才将其调用内存。...通常外部命令实体并不包含在shell,但是其命令执行过程是shell程序控制。shell程序管理外部命令执行路径查找、加载存放,控制命令执行。.../myshell env[24]:HaHa=aa 因此我们想说是:命令行参数表是从命令行获取shell 自己维护,环境变量表是系统文件读取也是 shell 自己维护,然后通过 execvpe

16110
  • Python 自动化指南(繁琐工作自动化)第二版:十七、计时、安排任务和启动程序

    Python 启动其他程序 Python 程序可以用内置subprocess模块Popen()函数启动你电脑上其他程序。(Popen()函数名称P代表进程。)...在 Windows 上,在交互式 Shell 输入以下内容。请注意,wait()调用将会阻塞,直到您退出已启动微软画图程序。...向Popen()函数传递命令行参数 您可以将命令行参数传递给使用Popen()创建进程。为此,您将一个列表作为唯一参数传递给Popen()。...最后,您 Python 程序可以使用subprocess.Popen()函数启动其他应用。命令行参数可以传递给Popen()调用,以便用应用打开特定文档。...假设您有一个名为spam()函数。如何调用这个函数并在单独线程运行其中代码呢? 您应该如何避免多线程并发问题? 实践项目 为了练习,编写执行以下操作程序

    2.7K20

    Python 自动化指南(繁琐工作自动化)第二版:六、字符串操作

    交互式 Shell 输入以下内容,注意每个方法调用返回内容: >>> spam = 'Hello, world!'...此方法在调用字符串搜索它所传递分隔符字符串,并为before、separator和after字符串返回一个三个字符串组成元组。...转到附录 B 来学习如何方便地运行你 Python 脚本,并能够向它们传递命令行参数。(您将无法使用 Mu 向您程序传递命令行参数。) Python 没有pyperclip模块。...第一步:程序设计和数据结构 您希望能够用一个简短关键短语作为命令行参数来运行这个程序,例如,同意或忙碌。与该关键短语相关联消息将被复制到剪贴板,以便用户可以将其粘贴到电子邮件。...第二步:处理命令行参数 命令行参数将存储在变量sys.argv。(关于如何在你程序中使用命令行参数更多信息,请参见附录 B 。)

    3.2K30

    支持多用户web终端实现及安全保障(nodejs)

    每次在命令行输入一串命令,敲入回车,终端进程都会fork一个进程,用来执行输入命令,终端进程通过系统调用wait4()监听子进程退出,同时通过暴露stdout输出进程执行信息。...->async,当进程退出时触发&baton->async消息,执行pty_after_waitpid函数; 最后父进程通过调用uv_thread_create创建一个进程,用于侦听上一个进程退出消息...在node层通过net.Socket(fd)创建一个套接字实现数据流双向IO,伪终端设备也有着主设备相同输入,从而在进程执行对应命令,进程输出也会通PIPE反应在主设备,进而触发...此处关于父进程、主设备、进程设备输入输出描述有些让人迷惑,在此解释。父进程与主设备关系是:父进程通过系统调用创建主设备(可看做是一个PIPE),获取主设备fd。...因此进程输入输出都是与设备fd相关联进程输出数据走是PIPE,并从PIPE读入父进程命令。

    1.7K50

    Python 自动化指南(繁琐工作自动化)第二版:十六、使用 CSV 文件和 JSON 数据

    注意,您没有将文件名字符串直接传递给csv.reader()函数。 访问reader对象最直接方法是通过将它传递给list()➍ 来将其转换成普通 Python 列表。...检查 CSV 文件无效数据或格式错误,并提醒用户注意这些错误。 CSV 文件读取数据作为 Python 程序输入。...第一步:从命令行参数获取位置 这个程序输入将来自命令行。使getOpenWeather.py看起来像这样: #!...如果列表只有一个元素,那么用户没有在命令行上提供位置,并且在程序结束之前将向用户提供“用法”消息。...(第 17 章讲述日程安排,第 18 章解释如何发送电子邮件。) 多个站点获取天气数据一次显示,或者计算显示多个天气预测平均值。 总结 CSV 和 JSON 是存储数据常见纯文本格式。

    11.6K40

    (3)Powershell基础知识(一)

    输出结果,可以看到可以获取指定service,新建新service,重启,设置service一些状态,启动,停止等操作。...Get-Help Get-Service     如果要查看该输出结果成员信息,比如该输出结果有哪些成员,方法,返回类型等,可以通过管道运算符(|)将其执行结果传递给Get-Member,如输入以下命令可以查看...交互式脚本环境 PowerShell 将交互式环境和脚本环境组合在一起,从而允许访问命令行工具和 COM 对象,同时还可利用 .NET Framework 类库 (FCL) 强大功能(可以加载调用cmd...举个例子,对于请求和显示帮助,传统命令行工具都有它们自己方案。一些命令行工具使用 /? 来触发帮助显示,而其他一些命令行工具则使用 -?、/H 甚至 //。...但在 PowerShell 输入命令时,它会自动分析预处理所输入全部内容。如果在 PowerShell cmdlet 中使用 -? 参数,则始终表示“显示此命令帮助”。

    4.1K20

    Python 进阶指南(编程轻松进阶):二、环境配置和命令行

    如果进程没有响应,这些任务管理器可以强制终止正在运行进程命令行 命令行是一个基于文本程序,让你输入命令与操作系统交互运行程序。...使用命令行参数 命令行参数是您在命令名后输入文本。像传递给 Python 函数调用参数一样,它们为命令提供了特定选项或附加指示。...(例如当命令行运行 Python 解释器时),则该进程会收到其自己进程环境变量副本。...进程可以更改其环境变量值,而不会影响父进程环境变量,反之亦然。 您可以将操作系统环境变量集视为“主副本”,进程该副本复制其环境变量。操作系统环境变量变化没有 Python 程序频繁。...不使用命令行运行 Python 程序 您可能已经知道如何操作系统提供任何启动器运行程序

    6.3K60

    ApacheTomca远程执行代码(CVE-2019-0232)漏洞浅析和复现

    这种高严重性漏洞可能允许攻击者通过滥用Tomcat CGIServlet输入验证错误引起操作系统命令注入来执行任意命令。...通过调用CreateProcess()函数启动Windows操作系统进程,该函数将以下命令行作为字符串(对CreateProcesslpComandLine参数):int CreateProcess...漏洞是由于命令行参数JRE到Windows不正确传递而产生,对于Java应用程序,在CreateProcess()函数启动之前调用ProcessBuilder()。...转换,例如&,||,&&运算符触发转换,将命令行拆分为几个部分。所有cmd转换都由以下元字符之一触发:(,),%,!,^,“,,&和|。...元字符“特别有趣:当cmd正在转换命令行看到”时,它会将“复制”到新命令行,然后开始将字符命令行复制到新命令行,而不会看到是否有任何这些字符是元字符。

    2.6K10

    【愚公系列】2021年12月 Python教学课程 26-系统编程

    执行命令 前言 如果我们要操作文件、目录,可以在命令行下面输入操作系统提供各种命令来完成。比如 dir,cd 等命令。如果要在 Python 程序执行这些目录和文件操作怎么办?...执行命令 我们几乎可以在任何操作系统上通过命令行指令与操作系统进行交互。那么我们如何通过 Python 来完成这些命令行指令执行呢?...模块主要用于创建进程连接它们输入、输出和错误管道,获取它们返回状态。...subprocess 模块常用函数 大多数情况下,推荐使用 run()方法调用进程,执行操作系统命令。...交互式输入 并不是所有的操作系统命令都像‘dir’或者‘ipconfig’那样单纯地返回执行结果,还有很多像‘python’这种交互式命令,你要输入点什么,然后它返回执行结果。

    88320

    Python 自动化指南(繁琐工作自动化)第二版:九、读取和写入文件

    用shelve模块保存变量 您可以使用shelve模块将 Python 程序变量保存到二进制文件。这样,您程序可以将数据硬盘恢复到变量。...shelve模块将允许你添加保存和打开特性到你程序。例如,如果您运行一个程序输入一些配置设置,您可以将这些设置保存到一个架子文件,然后让程序在下次运行时加载它们。...这意味着代码需要执行以下操作: sys.argv读取命令行参数。 读写剪贴板。 保存加载到架子文件。...然后,当用户想要将文本粘贴回剪贴板时,您将打开架子文件并将其加载回您程序。架子文件将以前缀MCB➌命名。...架子值类似于什么数据结构? 实践项目 为了练习,设计编写以下程序。 扩展多剪贴板 扩展本章多剪贴板程序,使它有一个delete 命令行参数,可以从书架上删除一个关键字。

    3.5K51

    Python 自动化指南(繁琐工作自动化)第二版:十二、网络爬取

    *这就是你程序要做: 从命令行参数或剪贴板获取街道地址 打开网络浏览器,进入该地址谷歌地图页面 这意味着您代码需要执行以下操作: sys.argv读取命令行参数。 读取剪贴板内容。...Python 没有提供requests模块,所以您必须先安装它。从命令行,运行 PIP 安装-用户请求。(附录 A 有关于如何安装第三方模块更多细节。)...元素属性获取数据 Tag对象get()方法使得元素访问属性值变得简单。向该方法传递一个属性名称字符串,返回该属性值。...这就是你程序要做: 从命令行参数获取搜索关键字 检索搜索结果页面 为每个结果打开一个浏览器选项卡 这意味着您代码需要执行以下操作: sys.argv读取命令行参数。...如果可能的话,让你程序提示用户使用第 8 章描述pyinputplus.inputPassword()函数键盘输入他们密码。

    8.7K70

    Linux 操作系统!开篇!!!

    Linux 简介 UNIX 是一个交互式系统,用于同时处理多进程和多用户同时在线。...它主要功能就是读取用户输入和显示计算输出。shell 命令可以包含参数,它们作为字符串传递给调用程序。...标准输入读入,对其进行处理并将其写入到标准输出程序称为 过滤器。...上图中还包括了 中断 和 调度器,中断是与设备交互主要方式。中断出现时调度器就会发挥作用。这里低级代码停止正在运行进程将其状态保存在内核进程结构启动驱动程序。...在内核最顶层是系统调用接口,所有的系统调用都是经过这里,系统调用触发一个 trap,将系统用户态转换为内核态,然后将控制权移交给上面的内核部件。

    7.3K30

    Jupyter Notebooks嵌入Excel使用Python替代VBA宏

    在本文中,我将向你展示如何设置在Excel运行Jupyter Notebook。在这两者之间共享数据,甚至可以Excel工作簿调用Jupyter笔记本编写Python函数!...Python 因为PyXLL在与Excel相同进程运行Python,所以用Python访问Excel数据以及在Python和Excel之间快速调用。...无论你是使用Python加载数据集并将其传输到Excel工作簿,还是通过Excel处理数据集希望将结果返回Excel,Python复制数据到Excel都很容易。...return desc 现在,你可以编写复杂Python函数来进行数据转换和分析,Excel如何调用或排序这些函数。更改输入会导致调用函数,并且计算出输出会实时更新,这与你期望一样!...由于PyXLL在Excel进程内运行Python,因此Python调用Excel不会对性能造成任何影响。也可以外部Python进程调用Excel,但这通常要慢得多。

    6.4K20

    如何利用日志来监控和限制PowerShell攻击活动

    下面给出是真实场景攻击实例: 在这个样例,攻击者使用了.downloadfile()方法来下载恶意文件,使用环境变量将其存储在了用户Appdata目录,然后使用“Start-Process...下面给出是一个简单样例: 其中,cmd.js是一个远程脚本,它能够目标设备内存中远程调用calc.exe,整个过程不会在硬盘留下任何痕迹。...观察PowerShell父进程进程之间关系 一般来说,当我们开始菜单或磁盘目录中直接运行PowerShell的话,它会在explorer.exe进程下运行。...命令行为王 很多PowerShell攻击可以通过监控传递给PowerShell进程命令行参数来进行检测。...而此时,我们就需要记录事件ID 4688,然后过滤记录下任何关于PowerShell进程创建活动以及传递给PowerShell命令行参数,并以此来检测可疑PowerShell攻击活动。

    2.2K50

    如何在Ubuntu 16.04上安装和使用Docker

    介绍 Docker是一个应用程序,它使得在容器运行应用程序进程变得简单易行,就像虚拟机一样,只是更便携,更加资源友好,更依赖于主机操作系统。 在Ubuntu 16.04上安装Docker有两种方法。...它也可以docker组用户运行,该用户在Docker安装期间自动创建。...语法采用以下形式: docker [option] [command] [arguments] 要查看所有可用命令,请输入: docker Docker 1.11.1开始,可用命令完整列表包括...一旦确定了要使用图像,就可以使用pull命令将其下载到计算机,如下所示: docker pull ubuntu 下载映像后,您可以使用带有run命令下载映像运行容器。...-a交换机: docker ps -a 要查看您创建最新容器,请将其递给-l交换机: docker ps -l 停止正在运行或活动容器就像输入一样简单: docker stop container-id

    3.4K30

    Linux:进程控制(二.详细讲解进程程序替换)

    1.2原理 当进程调用一种exec函数时,该进程用户空间代码和数据完全被新程序替换 替换完成后,控制权将转移到新程序入口点,开始执行新程序代码。...这个过程涉及将新程序内容磁盘加载到内存,为进程提供执行所需资源。...因此,虽然我们常说是“程序替换”,但实际上更准确地说是将新程序加载到内存,替换掉原有的程序,以实现进程功能切换和更新。 程序运行要加载到内存;为什么?冯诺依曼体系规定;如何加载呢?...把数据从一个硬件搬到另一个硬件,只有操作系统能做 2.多进程程序替换 我们可以创建一个进程进程来进行程序替换,父进程来等待结果就可以。为什么?...是要传递给程序命令行参数,后面的参数是额外环境变量,以 NULL 结尾。

    19710

    Python 异步: 在非阻塞子进程运行命令(19)

    我们可以 asyncio 执行命令。该命令将在我们可以使用非阻塞 I/O 写入和读取进程运行。 1....我们可以让 asyncio 程序处理进程输入或输出。 这可以通过指定输入或输出流指定要重定向常量来实现,例如 asyncio.subprocess.PIPE。...main() 协程恢复并报告进程详细信息。 main() 进程终止,asyncio 程序终止。 echo 命令输出在命令行上报告。这突出了我们如何 asyncio 程序执行命令。...如何通过 Shell 运行命令 我们可以使用 shell 执行命令。shell 是命令行用户界面,称为命令行解释器 (CLI)。它将代表用户解释和执行命令。...-l 基于 Unix 操作系统 shell 示例包括: shell 已经在运行,它被用来启动 Python 程序

    3K40

    Python subprocess与命令行交互

    Python subprocess 模块是一个功能强大库,用于启动和与流程交互。 它附带了一些高级 api,比如调用、检查输出和运行,这些都集中在程序运行和等待完成进程上。...将它作为一个进程启动,然后将客户机连接到它,运行一些测试序列。 当完成后,希望以一种有序方式关闭子程序。 这对于同步运行进程 api 来说是很难实现,因此必须查看一些底层级别的 api。...请注意在调用时传递给 Python -u: 这对于避免标准输出缓冲并在进程被终止时尽可能多地查看标准输出非常关键。 在与进程交互时,缓冲是一个严重问题,稍后将看到更多这方面的示例。...标准 i/o 意味着可以按行使用(想想所有的 Unix 命令行工具是如何工作) ; 如果需要子行粒度,stdout 不是正确方法(使用套接字或其他方法)。...它正确地输入 stdin,完成后关闭它(这意味着许多交互式程序游戏结束) 等等。 但是,如果真的希望基于进程以前一些输出提供额外输入,该怎么办呢。

    7.6K22
    领券