首页
学习
活动
专区
工具
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,这样方便用户通过

13410

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

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

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

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

    2.7K20

    04-shell

    负责接收用户输入的操作指令(命令),并运行和解释,将需要执行的操作传递给操作系统内核并执行 shell程序在系统中充当了一个”命令解释“的角色 4.1 Shell常见种类 Bsh:由贝尔实验室编写。...Csh:是因使用C语言的语法风格而得名,在用户的命令行交互界面上进行了很多改进,并增加了历史,别名,文件名替换,作业掏等功能,相比Bsh,Csh在更加适用为  用户提供命令交互操作。...普通变量一般是由开发者用户开发脚本程序时创建的。...$@ 获取当前shell的所有传参的参数,不加引号同@加上双引号,例如: “$@”,则表示将所有参数视为不同的独立字符串,相当于“$1” “$2”“$3” “……”,这是将参数传递给其他程序的最佳方式,...c 抑制更多的输出 参数 6.3定义变量的方式 6.3.1三种定义变量的方式 直接赋值 传参 (传递参数) 交互式设置变量,使用read命令 6.3.2 read命令说明 获取输入内容,在命令行中使用

    7610

    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

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

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

    2.7K10

    (3)Powershell基础知识(一)

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

    4.1K20

    解析 Node.js 中的 process.stdin 和 process.stdout

    process.stdin 的含义与作用process.stdin 是 Node.js 提供的一个用于读取标准输入流的对象。标准输入流通常用于接收来自用户键盘输入或者其他程序通过管道传输的数据。...这意味着它不会自动开始读取数据,而需要明确调用方法或监听事件来实现输入流的处理。核心属性与方法process.stdin.resume():该方法用于将输入流从暂停模式切换到流动模式。...在流动模式下,数据会持续地传递给注册的事件处理函数。process.stdin.pause():该方法用于将输入流切换到暂停模式,停止触发 data 事件。...默认情况下,它返回 Buffer 对象,但可以通过设置为 utf8 等格式,将其转换为字符串。使用场景交互式命令行工具:process.stdin 常用于实现 CLI 工具,与用户进行实时交互。...例如,接收用户输入的命令或参数。数据管道:在 Linux 或其他类 Unix 系统中,输入流可以通过管道操作符传输到 Node.js 程序。

    5500

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

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

    6.4K60

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

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

    88620

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

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

    8.7K70

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

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

    3.5K51

    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

    Linux 操作系统!开篇!!!

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

    7.3K30

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

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

    2.3K50

    如何在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.5K30

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

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

    22210
    领券