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

为什么我的标准输入重定向('<')不能与subprocess.Popen()一起工作?

标准输入重定向('<')不能与subprocess.Popen()一起工作的原因是,subprocess.Popen()函数在执行时会创建一个新的子进程,并且默认情况下不会继承父进程的标准输入。因此,如果你尝试使用标准输入重定向来向子进程提供输入数据,是无法生效的。

要解决这个问题,可以通过设置subprocess.Popen()函数的stdin参数来实现标准输入的重定向。具体做法是,将stdin参数设置为subprocess.PIPE,这样子进程就可以从管道中读取输入数据。

下面是一个示例代码,演示了如何使用subprocess.Popen()函数与标准输入重定向一起工作:

代码语言:txt
复制
import subprocess

# 创建子进程,并将标准输入重定向到文件input.txt
with open('input.txt', 'r') as input_file:
    process = subprocess.Popen(['python', 'script.py'], stdin=input_file, stdout=subprocess.PIPE)

# 读取子进程的输出
output = process.communicate()[0]
print(output)

在上述代码中,我们使用了open()函数打开了一个名为input.txt的文件,并将其作为stdin参数传递给subprocess.Popen()函数。这样子进程就可以从input.txt文件中读取输入数据。

需要注意的是,subprocess.PIPE参数用于将子进程的标准输出重定向到管道中,如果需要获取子进程的输出结果,可以使用process.communicate()方法。

推荐的腾讯云相关产品:腾讯云函数(Serverless Cloud Function),它是一种无服务器计算服务,可以让你在云端运行代码而无需管理服务器。腾讯云函数支持多种编程语言,包括Python、Node.js、Java等,可以方便地与subprocess.Popen()函数结合使用。了解更多关于腾讯云函数的信息,请访问:腾讯云函数产品介绍

请注意,以上答案仅供参考,具体的解决方案可能因实际情况而异。

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

相关·内容

pyinstaller打包成无控制台程序时运行出错(与popen冲突解决方法)

就有点纳闷:为什么有控制台打包出来exe(不使用-w参数)可以运行,使用-w参数(无控制台)打包却不能运行呢?...stdin、stdout和stderr分别表示子程序标准输入标准输出和标准错误。 可选值有PIPE或者一个有效文件描述符(其实是个正整数)或者一个文件对象,还有None。...如果是PIPE,则表示需要创建一个新管道,如果是 None,不会做任何重定向工作,子进程文件描述符会继承父进程。...这个简单封装,改成使用subprocess.popen,接着将subprocess.popen打开管道输入值(stdin)重定向,即可解决问题!..., stdin=subprocess.PIPE # 重定向输入值 ) proc.stdin.close() # 既然没有命令行窗口,那就关闭输入 proc.wait() result = proc.stdout.read

3.7K30
  • python正向连接后门

    新建一个socket,并将0、1、2分别代表系统stdin、stdout、stderr(标准输入、输出、错误)重定向到socket中,然后开启一个shell。...这样我们从socket中传来命令就会进入系统标准输入(就跟键盘输入效果一样了),系统输出和错误就会重定向到socket中,被我们客户端获取。...2.windows下cmd.exe /K参数是保持cmd结束,/c参数是执行完后就结束,注意区别。     之前想法是,python首先新建一个socket监听端口等待连接。...客户端连接上以后,就开启一个shell进程,然后把进程标准输入输出错误(stdin、stdout、stderr)都重定向到管道中,通过管道和python程序连接,py中subprocess库已为我们封装好了这个功能...但不知道为什么写了一个windows版本,总是报错: ?     不太能理解,windows版本就把/bin/sh替换成cmd.exe,但就出这个错。

    1.4K31

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

    该 API 与 multiprocessing.Process 类非常相似,可能与 subprocess.Popen 类更相似。...我们可以让 asyncio 程序处理子进程输入或输出。 这可以通过指定输入或输出流并指定要重定向常量来实现,例如 asyncio.subprocess.PIPE。...echo 命令将直接在标准输出上报告提供字符串。下面列出了完整示例。 请注意,此示例假设您可以访问“echo”命令,不确定它是否适用于 Windows。...命令输入和输出将由 shell 处理,例如标准输入标准错误和标准输出。 我们可以让 asyncio 程序处理子进程输入或输出。...echo 命令将直接在标准输出上报告提供字符串。下面列出了完整示例。 请注意,此示例假设您可以访问“echo”命令,不确定它是否适用于 Windows。

    3K40

    使出Python六脉神剑,让Python拥有无限扩展性

    这么做非常好,因为您实际上可以用这种方式一次运行多个命令,并设置管道和输入/输出重定向。...函数提供了一个用于操作文件对象,可用使用标准输入输出方式来访问文件中数据。...Popen类相对于popen函数优势是将所有的选项都统一放在了Popen类中,而不是需要4个不同popen函数完成这些工作。 4.call函数 来自subprocess模块call函数。...类C函数 os模块还提供了与C语言类似的fork / exec / spawn函数,但是建议直接使用它们,例如: import os print(os.execl('/bin/ls', ' '))...如果你无法完全信任这些字符串,那么有可能会带来严重安全隐患。例如,如果用户正在输入字符串某些/任何部分。如果不确定,请仅将这些方法与常量一起使用。为了更好地说明这一点,请看下面的代码。

    62130

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

    这里内容以Linux进程基础和Linux文本流为基础。subprocess包主要功能是执行外部命令和程序。比如说,需要使用wget下载文件。在Python中调用wget程序。...从这个意义上来说,subprocess能与shell类似。 subprocess以及常用封装函数 当我们运行python时候,我们都是在创建并运行一个进程。...子进程文本流控制 (沿用child子进程) 子进程标准输入标准输出和标准错误也可以通过如下属性表示: child.stdin child.stdout child.stderr 我们可以在Popen...()建立子进程时候改变标准输入标准输出和标准错误,并可以利用subprocess.PIPE将多个子进程输入和输出连接在一起,构成管道(pipe): import subprocess child1...我们还可以利用communicate()方法来使用PIPE给子进程输入: import subprocess child = subprocess.Popen(["cat"], stdin=subprocess.PIPE

    2.8K60

    自带 print 函数居然会报错?

    直到这个问题反复出现才认真看了这个异常,定睛一看 print 也是 IO 操作嘛,难道真的是自带 print 函数都出问题了?...如果不需要子进程中输出时,也可以将 command 标准输出重定向到 /dev/null。 也可以使用 Python3 subprocess.Popen 模块来运行。...更多内容 问题虽然是解决了,其中还是涉及到了一些咱们平时不太注意知识点,这次我们就来一起回顾一下。...比如这次提到 Python 中 os.popen() 就是创建了一个子进程,既然是子进程那肯定是需要和父进程进行通信才能达到协同工作目的。...这里 0 1 2 分别对应一个进程stdin(标准输入)/stdout(标准输出)/stderr(标准错误)。

    68910

    python之系统命令

    0 无缓冲,1 行缓冲,其他 缓冲区大小,负值 系统缓冲 stdin, stdout, stderr:分别表示程序标准输入、输出、错误句柄 preexec_fn:只在Unix平台下有效,用于指定一个可执行对象...(callable object),它将在子进程运行之前被调用 close_sfs:在windows平台下,如果close_fds被设置为True,则新创建子进程将不会继承父进程输入、输出、错误管道...所以不能将close_fds设置为True同时重定向子进程标准输入、输出与错误(stdin, stdout, stderr)。...()函数,用于设置子进程一些属性,如:主窗口外观,进程优先级等等 import subprocess ret1 = subprocess.Popen(["mkdir","t1"]) ret2 =...subprocess.Popen("mkdir t2", shell=True) 终端输入命令分为两种: 输入即可得到输出,如:ifconfig 输入进行某环境,依赖再输入,如:python import

    1.1K40

    正确使用python调用shell姿势

    python是一门简洁灵活语言,也是一门胶水语言,能与很多其他编程语言进行交互,虽然性能差一点,但易用,入门和上手都比较简单,所以一直以来都被使用广泛。...= stream.read()print output 输出123 我们可以看到popen方法可以获取命令执行后到输入结果,但这还是有缺陷,我们知道在linux里面,有标准0,1,2来代表标准输入...标准输入,输出,错误等信息。...stdin, stdout, stderr:分别表示程序标准输入、输出、错误句柄 preexecfn:只在 Unix 平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用...这里已经封装好了2个通用方法,一个是执行命令能够实时获取终端输出信息,一个是可以执行命令结束后得到结果。

    7.5K20

    python subprocess模块

    terminate() 杀掉所启动进程 communicate() 等待任务结束 stdin 标准输入 stdout 标准输出 stderr 标准错误 pid The process ID...0 无缓冲,1 行缓冲,其他 缓冲区大小,负值 系统缓冲 stdin, stdout, stderr:分别表示程序标准输入、输出、错误句柄 preexec_fn:只在Unix平台下有效...,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用 close_sfs:在windows平台下,如果close_fds被设置为True,则新创建子进程将不会继承父进程输入...所以不能将close_fds设置为True同时重定向子进程标准输入、输出与错误(stdin, stdout, stderr)。...CreateProcess()函数,用于设置子进程一些属性,如:主窗口外观,进程优先级等等 终端输入命令分为两种: 输入即可得到输出:如 ifocnfig 输入进行某环境,依赖某环境再输入

    1K20

    python中执行shell命令几个方

    0 无缓冲,1 行缓冲,其他 缓冲区大小,负值 系统缓冲 stdin, stdout, stderr 分别表示程序标准输入、输出、错误句柄 preexec_fn 只在Unix平台下有效,...用于指定一个可执行对象(callable object),它将在子进程运行之前被调用 close_sfs 在windows平台下,如果close_fds被设置为True,则新创建子进程将不会继承父进程输入...所以不能将close_fds设置为True同时重定向子进程标准输入、输出与错误(stdin, stdout, stderr)。...函数,用于设置子进程一些属性,如:主窗口外观,进程优先级等等 createionflags 同上 import subprocess ret1 = subprocess.Popen(["mkdir...","t1"]) ret2 = subprocess.Popen("mkdir t2", shell=True) 终端输入命令分为两种: 输入即可得到输出,如:ifconfig 输入进行某环境,依赖再输入

    3K10

    记录Python 调用 subprocess.Popen 卡死解决办法

    executable="/bin/bash":指定要执行 shell 程序,这里是 /bin/bash。 stderr=subprocess.STDOUT:将子进程标准错误输出合并到标准输出中。...universal_newlines=True:将输入和输出转换为文本模式,而不是字节模式。 cwd=cwd:设置子进程工作目录。...原因就是:PIPE本身可容纳量比较小,所以程序会卡死,所以一大堆内容输出过来时候,会导致PIPE不足够处理这些内容 实际业务需求并不关心程序执行过程中输出,只要知道最后执行结果即可,使用上面的...它返回一个 Popen 对象,通过该对象你可以控制子进程输入、输出和状态。...subprocess.Popen 提供了更多灵活性,但需要你手动管理子进程输入、输出和状态,因此在处理更复杂子进程交互时可能需要更多工作

    1.4K10

    python执行系统命令

    以上这些都是基本用法,在subprocess模块中,还提供了Popen方法,提供了更加灵活强大功能,可以控制系统命令输入输出,通过管道连接多个命令。...控制标准输入经典使用场景是运行交互式命令,用法如下 >>> import subprocess# stdin 控制标准输入流# stdout 控制标准输出流>>> s = subprocess.Popen...("python", stdout=subprocess.PIPE, stdin=subprocess.PIPE, shell=True)# 向标准输入流写入参数>>> s.stdin.write(b"print...()>>> out'hello\n' 还有一种用法是捕获程序标准输出和标准错误流,用法如下 >>> p = subprocess.Popen(['ls', '-l'], stdout = subprocess.PIPE...又时我们希望不显示程序输出和报错信息,此时可以将标准输出和标准错误流重定向到/dev/null,写法如下 >>> subprocess.Popen(['ls', '-l'], stdout = subprocess.DEVNULL

    1.7K10

    python模块之subprocess类与常量

    常量 subprocess.DEVNULL:可传递给stdin, stdout, stderr参数特殊值,意味着将使用特殊文件os.devnull重定向输入输出 subprocess.PIPE:可传递给...stdin, stdout, stderr参数特殊值,意味着使用管道重定向输入输出 subprocess.STDOUT:可传递给stderr参数特殊值,表示重定向标准错误到标准输出 Popen 在一个新进程中执行子程序...stdin/stdout/stderr:分别指定程序执行标准输入标准输出,标准错误。可选值包括PIPE,DEVNULL,已存在文件描述符(正整数),已存在文件对象,None。...除此之外,stderr还可以是STDOUT,表示标准错误输出重定向标准输出。 preexec_fn:限于POSIX系统,设置一个可调用对象,先于子进程中程序执行。...cwd:在子进程执行前改变工作目录为cwd,可以是字符串或path-like对象。

    2.4K10

    跨平台PHP调试器设计及使用方法——通信

    因为pydbgp不能像API一样使用,所以我只能模拟标准输入输出来达到和它交互。而如果标准输入输出被改变,将影响整个程序,所以为了避开这种设计对我们自己代码及其他第三方库影响。...我们需要重定向标准输入和输出,于是设计了一个重定向之后输入类input_redirection,其核心就两个函数 def readlines(self, size=-1):..._lock_excute.release()         write函数用于从服务器中接收请求内容,然后重定向之后输入通过readlines读取内容。从而达到模拟请求目的。        ...而重定向标准输出类则相对复杂点,因为它要牵扯到数据内容。...利用这个特征,我们在write函数中分析出所处阶段,并告知_send_data发送什么样数据。         剩下工作便是让整个程序标准输入和输出被重定向,还有就是启动通信服务端。

    40910

    06-1重定向

    (0)用法格式 命令 > 文件名 (1)为什么? 主要用于把命令输出内容保存到一个文件中。...ls -l /bin/usr 2> /dev/null # 把标准错误重定向到/dev/null ,也就是处理错误信息 (1)位桶 bit bucket,是一个古老 UNIX 概念,由于它普适性...④ cat命令指定任何参数 虽然这样很好,但是这跟标准输入有什么关系呢?确实没有任何关系,但是我们可以试试其它情况,如果输入 cat 命令却不带任何参数,会出现什么样结果呢?...# 这个是标准输入,因为在默认情况下标准输入是连接到键盘,所以这是从键盘上输入。 下一步,按一下 Ctrl-D,告知 cat 命令它已经达到了标准输入文件尾(EOF)。 ?...cat命令指定任何参数.png 在缺少文件名参数情况下,cat 命令将把标准输入内容复制到标准输出文件中,因此我们将看到文本行重复显示(也就是,第一行是标准输入,第二行是标准输出)。

    85320

    Python 执行系统命令

    用法: child = subprocess.Popen(["cmd","arg1"...]) 在一些复杂场景中,我们需要将一个进程执行输出作为另一个进程输入。...在另一些场景中,我们需要先进入到某个输入环境,然后再执行一系列指令等。这个时候我们就需要使用到suprocessPopen()方法。...该方法有以下参数 参数 作用 args 一般是一个字符串,是要执行shell命令内容 bufsize 设置缓冲,负数表示系统默认缓冲,0表示无缓冲,正数表示自定义缓冲行数 stdin 程序标准输入句柄...,NONE表示不进行重定向,继承父进程,PIPE表示创建管道 stdout 程序标准输出句柄,参数意义同上 stderr 程序标准错误句柄,参数意义同上,特殊,可以设置成STDOUT,表示与标准输出一致...ipconfig', # cmd特定查询空间命令 stdin=None, # 标准输入 键盘 stdout=PIPE, # -1 标准输出(演示器、终端) 保存到管道中以便进行操作

    1.6K10

    python 标准类库-并行执行之subprocess-子进程管理

    subprocess.STDOUT 可用于Popen函数stdin,stdout或者stderr参数指特定值,表示标准错误信息必须一起写入同样句柄,比如标准输出。...stdin, stdout,stderr分别指明了被执行程序标准输入标准输出和标准错误处理文件句柄。可选值PIPE,DEVNULL,已存在文件描述符(一个正整数),已存在文件对象,None。...PIPE表示应该创建通往子进程管道。DEVNULL表示应该使用指定文件os.devnull。默认参数None则表示无进行重定向,子进程文件句柄从父进程继承。...stdin, stdout 和stderr 分别指定被执行程序标准输入标准输出,标准错误文件句柄。...…… 可配合with使用,退出时,先关闭标准文件描述符,如下 import subprocess if __name__ == '__main__': with subprocess.Popen([

    4.1K20
    领券