首页
学习
活动
专区
工具
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()函数结合使用。了解更多关于腾讯云函数的信息,请访问:腾讯云函数产品介绍

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

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

相关·内容

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', ' '))...如果你无法完全信任这些字符串,那么有可能会带来严重的安全隐患。例如,如果用户正在输入字符串的某些/任何部分。如果不确定,请仅将这些方法与常量一起使用。为了更好地说明这一点,请看下面的代码。

    65030

    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(标准错误)。

    70310

    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 提供了更多的灵活性,但需要你手动管理子进程的输入、输出和状态,因此在处理更复杂的子进程交互时可能需要更多的工作。

    2K10

    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.5K10

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

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

    41510

    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.2K20

    Python 执行系统命令

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

    1.7K10

    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 命令将把标准输入内容复制到标准输出文件中,因此我们将看到文本行重复显示(也就是,第一行是标准输入,第二行是标准输出)。

    86120

    Python守护进程daemon实现

    至此,这个子进程作为新的进程组的组长,完全脱离了其他进程的控制,并且没有控制终端。 4、将当前工作目录更改为根目录(或某一特定目录位置)。...6、某些守护进程可以打开/dev/null使其具有文件描述符0、1、2,这使任何一个试图读标准输入、写标准输出或标准错误的库例程都不会产生任何效果。...inetd完成了 所有需要做的事情,包括重定向标准文件描述符,需要做的事情只有chdir()和umask()了 ''' def daemonize (stdin='/dev/null',...stdout='/dev/null', stderr='/dev/null'): #重定向标准文件描述符(默认情况下定向到/dev/null) try: pid = os.fork...sys.stderr.write ("fork #2 failed: (%d) %s\n" % (e.errno, e.strerror) ) sys.exit(1) #进程已经是守护进程了,重定向标准文件描述符

    7.7K30
    领券