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

在标准输入上提供文本时,如何使用run而不是communicate?

在使用Python的subprocess模块时,runcommunicate都是用来与子进程交互的方法,但它们的使用场景和方式有所不同。

基础概念

  • run: 这是Python 3.5及以后版本中引入的一个方法,用于执行子进程并等待其完成。它返回一个CompletedProcess实例,包含了子进程的返回码、输出等信息。
  • communicate: 这是一个较早的方法,用于与子进程进行输入/输出交互。它通过管道传递数据,并返回一个包含子进程输出的元组。

优势

  • run:
    • 更简洁的API,易于理解和使用。
    • 自动处理子进程的输入/输出流,减少了手动管理流的复杂性。
    • 返回一个CompletedProcess对象,可以方便地获取子进程的返回码和输出。
  • communicate:
    • 提供了更细粒度的控制,可以单独处理标准输入、输出和错误流。
    • 适用于需要与子进程进行复杂交互的场景。

类型

  • run: 是一个高级方法,适合大多数简单的子进程执行场景。
  • communicate: 是一个低级方法,适合需要精细控制输入/输出的复杂场景。

应用场景

  • run:
  • run:
  • communicate:
  • communicate:

问题与解决

如果你想在标准输入上提供文本时使用run而不是communicate,可以通过input参数来实现:

代码语言:txt
复制
import subprocess

input_text = "your input text here"
result = subprocess.run(['your_command', 'arg1', 'arg2'], input=input_text, capture_output=True, text=True)
print(result.stdout)

在这个例子中,input_text是要传递给子进程的标准输入文本。capture_output=True参数用于捕获标准输出和标准错误。

参考链接

通过这种方式,你可以更方便地在标准输入上提供文本,并利用run方法的优势来简化代码和处理子进程的输出。

相关搜索:CSS如何使文本在悬停时显示在图像旁边而不是图像上?如何在使用tkinter时添加文本而不是替换文本在类上使用js而不是输入id加载页面时,自动聚焦于字段如何在Python中使用变量而不是直接输入来对齐文本?无法使用提供的凭据在HEROKU上登录,而不是在本地主机上jQuery quickSearch 插件在点击提交按钮时触发,而不是在输入上绑定事件在第二页而不是登录页上重定向Flutter/Dart文本输入PyFlink -如何使用指定的文件输入格式(而不是文本格式) readFile()?如何使用angular JS在输入文本上设置Max如何使用复选框输入在选中时启用文本输入?是否可以在文本文件中而不是在命令行中向FFmpeg提供输入文件列表?如何在SWT MessageDialog或MessageBox中将焦点设置在文本上而不是按钮上?在使用LengthAwarePaginator时,如何返回Eloqent模型而不是数组?如何在按下按钮时检查文本值,而不是在文本更改时检查?如何在材料ui卡中更改悬停时的文本颜色?我想在卡片悬停时更改文本颜色,而不是在文本上悬停?如何使用jQuery在输入元素上实现占位符文本?当debug为False时,在Nginx上提供静态文件而不是媒体文件的Django在XmlDocument上使用Save()时渲染空的XML元素,如<this />,而不是<this> </ this>如何在图表旁边的画布上放置额外的文本(而不是使用HTML)?如何使用Helm在EKS上安装Traefik,但使用ALB而不是ELB?
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Python Subprocess库详解

简介 Subprocess库是Python中用于创建和管理子进程的标准库。它提供了一个强大灵活的接口,使得你可以Python中启动新的进程、连接它们的输入和输出,并与它们进行交互。...使用Shell命令 有时候我们可能需要在子进程中执行Shell命令,不是直接运行可执行文件。...通过使用shell=True参数,确保Windows可以执行带有空格的命令。...使用universal_newlines参数处理换行符 处理不同平台的文本输出,Subprocess库提供了universal_newlines参数,帮助你处理不同平台的换行符。...使用subprocess.Popen的restore_signals参数还原信号处理 Unix系统,subprocess.Popen的restore_signals参数允许你子进程启动还原信号处理为默认值

2.3K21

Python标准库06 子进程 (subprocess包)

另外subprocess还提供了一些管理标准流(standard stream)和管道(pipe)的工具,从而在进程间使用文本通信。...使用subprocess包中的函数创建子进程的时候,要注意: 1) 创建子进程之后,父进程是否暂停,并等待子进程运行。 2) 函数返回什么 3) 当returncode不为0,父进程如何处理。...", shell=True) 我们使用了shell=True这个参数。这个时候,我们使用一整个字符串,不是一个表来运行子进程。...子进程的文本流控制 (沿用child子进程) 子进程的标准输入标准输出和标准错误也可以通过如下属性表示: child.stdin child.stdout child.stderr 我们可以Popen...() print(out) subprocess.PIPE实际文本提供一个缓存区。

2.8K60
  • python模块之subprocess类与常量

    stdin, stdout, stderr参数的特殊值,意味着使用管道重定向输入输出 subprocess.STDOUT:可传递给stderr参数的特殊值,表示重定向标准错误到标准输出 Popen 一个新的进程中执行子程序...shell=TruePOSIX系统此参数表示指定一个新的shell程序替换默认shell/bin/sh。...stdin/stdout/stderr:分别指定程序执行的标准输入标准输出,标准错误。可选值包括PIPE,DEVNULL,已存在的文件描述符(正整数),已存在的文件对象,None。...只要提供了此参数,close_fds强制设为True。 cwd:子进程执行前改变工作目录为cwd,可以是字符串或path-like对象。...但如果指定了encoding/errors或者text为True,将使用指定的encoding和errors以文本模式打开stdin/stdout/stderr。

    2.5K10

    Python subprocess与命令行交互

    启动,交互,实时输出,终止 一个相关的用例是以“实时”方式获取子进程的标准输出,不是最后将所有内容放在一起。 在这里,必须非常小心缓冲,因为它很容易导致程序崩溃和死锁。...标准 i/o 意味着可以按行使用(想想所有的 Unix 命令行工具是如何工作的) ; 如果需要子行粒度,stdout 不是正确的方法(使用套接字或其他方法)。...线程会轮询子标准输出属性,只要有新行可用,就会循环并立即打印它们。 如果运行这个示例,您将注意到子进程的 stdout 是实时报告的,不是最后报告一个错误。...有时候可以一次提供这个程序的所有输入,然后检查它的输出; 这可以,也应该通过 communicate 来完成——这是完美的 API。...注意,也可以在这里使用communicate不是等待来捕获 stderr 输出。 使用非阻塞读线程和可阻塞线程进行交互 最后的示例演示了一个稍微更高级的场景。

    7.6K22

    subprocess:Python中创建子进程

    前言 subprocess库提供了一个API创建子进程并与之通信。这对于运行生产或消费文本的程序尤其有好处,因为这个API支持通过新进行的标准输入和输出通道来回传数据。...对于run()函数启动的进程,它的标准输入输出通道会绑定到父进程的输入输出。这说明调用程序无法捕获命令的输出。不过,我们可以通过为stdout和stderr参数传入PIPE来捕获输出,以备以后处理。...比如run(),call(),check_call()和check_output()函数都是Popen类的包装器。直接使用Popen可以更好的控制如何运行命令以及如何处理输入和输出流。...连接管道段 Linux系统中,我们可以将多个命令连接成一个管线,即可以把它们的输入输出串联在一起。...Python,一般使用input()进行用户输入数据。

    52470

    python的subprocess模块

    类实例的stdout和stderr属性或捕获相应的内容; ​ call()和check_call()函数返回的是命令执行的状态码,不是CompletedProcess类实例,所以对于它们而言,stdout...需要说明的是,该方法python3.x中才有。 call()方法启动的进程,其标准输入输出会绑定到父进程的输入和输出。调用程序无法获取命令的输出结果。...直接使用Popen会对如何运行命令以及如何处理其输入输出有更多控制。如通过为stdin, stdout和stderr传递不同的参数。...​ proc.stdin.write(msg) ​ 11 stdout_value = proc.communicate() stdout_value (b'Hello world', None) 需要进行相互交互的输入输出过程也可以使用...Popen调用系统命令式,建议使用communicate与stdin进行交互并获取输出(stdout),这样能保证子进程正常退出避免出现僵尸进程。

    3K20

    python—subprocess、gl

    另外subprocess还提供了一些管理标准流(standard stream)和管道(pipe)的工具,从而在进程间使用文本通信。...子进程的标准输入标准输出和标准错误如下属性分别表示: child.stdin child.stdout child.stderr 可以Popen()建立子进程的时候改变标准输入标准输出和标准错误...,并可以利用subprocess.PIPE将多个子进程的输入和输出连接在一起,构成管道(pipe);如没有写stdin和stdout,默认将子进程执行结果打印至屏幕不是保存于内存中 例1: #!...home/elk:/bin/bash\nmemcached:x:1003:1003::/home/memcached:/bin/bash\n', None) 说明: subprocess.PIPE管道实际文本提供一个缓存区...child2的输出文本也被存放在PIPE中,直到communicate()方法从PIPE中读取出PIPE中的文本communicate()是Popen对象的一个方法,该方法会阻塞父进程,直到子进程完成

    1.5K20

    正确的使用python调用shell的姿势

    python天生的优势,用它来开发一些devops的自动化作业是非常方便的,当然linux,一般我们用shell就能写一些简单的自动化脚本,但如果自动化作业复杂的话,使用shell脚本就很难搞定了,...,但这还是有缺陷的,我们知道linux里面,有标准的0,1,2来代表标准输入,输出和错误,现在只有stdout没有其他的两个变量还是有限制的,如果仔细看python的方法,会发现popen还有popen2...当创建标准流的管道对象使用,默认-1。...0:不使用缓冲区 1:表示行缓冲,仅当universalnewlines=True可用,也就是文本模式 正数:表示缓冲区大小 负数:表示使用系统默认的缓冲区大小。...stdin, stdout, stderr:分别表示程序的标准输入、输出、错误句柄 preexecfn:只 Unix 平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用

    7.5K20

    python模块之subprocess模块级方法

    input:input参数将作为子进程的标准输入传递给Popen.communicate()方法,必须是string(需要指定encoding或errors参数,或者设置text为True)或byte类型...调用call()函数不要使用stdout=PIPE或stderr=PIPE,因为如果子进程生成了足量的输出到管道填满OS管道缓冲区,子进程将因不能从管道读取数据导致阻塞。...全部参数传递给run()函数,但不支持显示地传递input=None继承父进程的标准输入文件句柄。...stdout=PIPE, timeout=timeout, check=True, **kwargs).stdout ---- subprocess模块还提供了python2...subprocess.getstatusoutput(cmd) 实际是调用check_output()函数,shell中执行string类型的cmd指令,返回(exitcode, output)形式的元组

    2.3K20

    Python标准库:执行系统命令的方法

    软件开发中,有时我们可能需要通过Python代码执行操作系统命令。Python的标准提供了强大的工具来实现这一目标。本文将介绍几种流行的方法,以及各自的优势和缺点。...优点:使用简单。 缺点:没有直接访问标准输出和标准错误输出;不推荐需要更丰富功能的场景使用。...3. subprocess.run subprocess.run 是Python 3.5及更高版本中的新功能,提供了更丰富的功能。...如果需要更多的控制,例如捕获输出,subprocess.run 或 subprocess.Popen 会更合适。 使用这些函数,一定要谨慎处理可能的安全风险,例如命令注入攻击。...使用列表形式的命令参数,不是字符串形式,可以帮助减轻这个风险。 总之,Python通过其标准库为我们提供了强大的工具来执行和控制系统命令,使我们能够灵活地与操作系统交互。

    27630

    用Python解锁微软Edge的文本转语音服务

    这个项目其实是一个 Python 三方模块,允许你使用 Microsoft Edge 的在线文本转语音服务,可以通过Python 代码进而使用提供的edge-tts和edge-playback命令。...如何高效地获取和处理这些信息,成为了每个人都需要面对的问题。 这里,文本转语音技术就派上了用场。从 AI 到人性化,试想一下,当你开车、跑步或者做家务,能够通过耳朵获取信息,是不是大大提高了效率?...如何在 Python 代码中使用 edge-tts 模块?...1.安装 edge-tts 模块: pip install edge-tts 2.代码中导入 edge-tts 模块: import edge_tts 3.创建 Communicate 对象: communicate...= edge_tts.Communicate() 4.使用 say() 方法将文本转换为语音: communicate.say("你好,这是一个 edge-tts 的示例。")

    38010

    python中执行DOS命令的3种方法小

    使用os.system("cmd") 特点是执行的时候程序会打出cmdLinux执行的信息。 import os os.system("ls")   2....使用Popen模块产生新的process 现在大部分人都喜欢使用Popen。Popen方法不会打印出cmdlinux执行的信息。的确,Popen非常强大,支持多种参数和模式。...参数Universal_newlines:不同操作系统下,文本的换行符是不一样的。如:windows下用’/r/n’表示换,Linux下用 ‘/n’。...subprocess.PIPE 创建Popen对象,subprocess.PIPE可以初始化stdin, stdout或stderr参数,表示与子进程通信的标准流。...使用commands.getstatusoutput方法 这个方法也不会打印出cmdlinux执行的信息。这个方法唯一的优点是,它不是一个阻塞的方法。即没有Popen函数阻塞的问题。

    2.2K20

    Python 执行系统命令

    system函数可以将字符串转化成命令服务器运行;其原理是每一条system函数执行时,其会创建一个子进程系统执行命令行,子进程的执行结果无法影响主进程。...a接收返回值 print(a) # 理论command是一个字符串,但实际看command还是得变为字节数组 # 当命令中存在中文可能会报编码错误,此时可以自己给命令编一下码 # exit_code...一些复杂场景中,我们需要将一个进程的执行输出作为另一个进程的输入另一些场景中,我们需要先进入到某个输入环境,然后再执行一系列的指令等。...ipconfig', # cmd特定的查询空间的命令 stdin=None, # 标准输入 键盘 stdout=PIPE, # -1 标准输出(演示器、终端) 保存到管道中以便进行操作...stderr=PIPE, # 标准错误,保存到管道 shell=True) # print(proc.communicate()) # 标准输出的字符串+标准错误的字符串 outinfo

    1.7K10

    零代码编程:用ChatGPT将TXT文本批量转Mp3语音文件

    如果有大量的文本文档,希望转换成语音文件,可以chatgpt中输入提示词: 你是一个Python编程专家,现在要完成一个编写将文本批量转语音的Python脚本的任务,具体步骤如下: 打开文件夹:D:\...语音另存为mp3文件,文件标题和txt文档一致,保存在同一个文件夹中; ###注意: edge-tts.exe位于文件夹:D:\Program Files (x86)\Scripts edge-tts库的使用方法...: Basic usage,If you want to use the edge-tts command, you can simply run it with the following command...edge_tts正确导入Communicate类 # 文件夹路径 txt_folder_path = "D:\\AR" # 函数以异步方式运行文本到语音的转换 async def text_to_speech...运行后,txt文本文档成功转换为mp3语音文件。

    12410

    NLPer,你知道最近很火的自然语言处理库么?

    你可以只使用pip安装: pip install pytorch-transformers 或者Colab使用以下命令: !...是不是很棒! 该模型成功地预测出了下一个单词 “world”。这是非常惊人的,因为这就是谷歌的例子。我建议你输入不同的句子来尝试这个模型,看看它预测的下一个单词是怎样的。...使用GPT-2、Transformer-XL和XLNet生成自然语言 让我们把文本生成带到下一个层次。我们将根据给定的输入生成一段文本不是只预测下一个单词。...实际,你可以从头构建自己的BERT模型,也可以对预训练版本进行微调。那么,让我们看看如何为BERT实现遮蔽语言模型。 问题定义 让我们正式定义我们的问题: 给定一个输入序列,我们将随机屏蔽一些单词。...我这样做是为了让你们对如何使用这个神奇的库有一个很好的直观感受。

    1.3K20

    pip卸载所有包_pip导出包

    如果要点个 关注 的话也不是不可以。 请各位参加一下文末的 投票 哦,如果 有什么不足之处,还 请各位大佬评论区提出,不胜感激。...为了方便,第三问题使用 subprocess.run 解决。 网上已经有好多文章都对 subprocess.Popen 和 subprocess.run 的参数进行解释,这里不多赘述。...对于subprocess.run ,除了要执行的命令外,我只设置了如下参数: universal_newlines ,设置输入输出的数据类型,True 为字符串,否则为字节串。...input ,这个是关键,使得代码可以与命令行进行交互,即指定命令后,命令行输入内容执行。本文中的作用是执行 pip uninstall 【包名】 后输入 y 进行确定。...出错的原因是读取执行结果编码错误导致。

    2.4K10
    领券