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

无法使用Python从Windows上派生的子进程中读取标准输出

问题:无法使用Python从Windows上派生的子进程中读取标准输出。

回答: 在Windows上,使用Python派生子进程并读取其标准输出时,可能会遇到一些问题。这些问题通常与Windows操作系统的特性和Python的实现方式有关。

解决这个问题的方法之一是使用subprocess模块中的subprocess.PIPE来捕获子进程的标准输出。下面是一个示例代码:

代码语言:txt
复制
import subprocess

# 派生子进程并捕获标准输出
process = subprocess.Popen(['command', 'arg1', 'arg2'], stdout=subprocess.PIPE)

# 读取子进程的标准输出
output, _ = process.communicate()

# 打印输出结果
print(output.decode())

在上面的代码中,subprocess.Popen函数用于派生子进程,并通过stdout=subprocess.PIPE参数来捕获子进程的标准输出。然后,使用process.communicate()方法来读取子进程的输出。最后,使用output.decode()将输出结果转换为字符串并打印出来。

需要注意的是,上述代码中的command应替换为实际的命令,arg1arg2应替换为实际的参数。

这种方法适用于大多数情况,但在某些特殊情况下可能仍然无法正常工作。如果遇到问题,可以尝试使用其他方法,如使用ctypes库调用Windows API来读取子进程的输出。

推荐的腾讯云相关产品:腾讯云函数(Serverless Cloud Function) 腾讯云函数是一种无服务器计算服务,可以让您在云端运行代码而无需购买和管理服务器。您可以使用腾讯云函数来执行各种任务,包括派生子进程并读取其输出。腾讯云函数支持多种编程语言,包括Python。您可以使用腾讯云函数来解决派生子进程读取标准输出的问题。

了解更多关于腾讯云函数的信息,请访问:腾讯云函数产品介绍

请注意,以上答案仅供参考,具体解决方法可能因实际情况而异。在实际应用中,建议根据具体需求和环境进行进一步的研究和测试。

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

相关·内容

如何在父进程读取(外部)进程标准输出标准错误输出结果

最近接手一个小项目,要求使用谷歌aapt.exe获取apk软件包信息。依稀记得去年年中时,有个同事也问过我如何获取被调用进程输出结果,当时还研究了一番,只是没有做整理。...它是我们启动进程时,控制进程启动方式参数。...这三个参数似乎就点中了标题中两个关键字“标准输出”、“标准错误输出”。是的!我们正是靠这几个参数来解决我们所遇到问题。那么如何使用这些参数呢?         我们选用还是老方法——管道。...我们之后将hWrite交给我们创建进程,让它去将信息写入管道。而我们父进程,则使用hRead去读取进程写入管道内容。...我们使用STARTF_USESTDHANDLES原因是:我们使用标准输出标准错误输出句柄。

3.8K10

python subprocess运行进程实时获取输出

起因是这样,c++程序开发后 功能号和指令,校验需要人工去看对照二进制代码,量大还费力, 于是打算利用python 去调用 c++程序去校验指令, 首先要做就是用python 获取c++程序...printf() 或cout 输出; 环境linux python 3.8.x 以下代码实现,获取子程序输出 command='....linux shell指令,如果要用shell 指令如ls 要将false 变成true, 通过指定stderr=subprocess.STDOUT,将子程序标准错误输出重定向到了标准输出,以使我们可以直接标准输出同时获取标准输出标准错误信息...p.poll() 返回进程返回值,如果为None 表示 c++进程还未结束. p.stdout.readline() c++标准输出里获取一行....参考文章1 pythonsubprocess.Popen()使用 参考文章 2 python subprocess运行进程实时获取输出

10.1K10

python模块之subprocess类与常量

stdin, stdout, stderr参数特殊值,意味着使用管道重定向输入输出 subprocess.STDOUT:可传递给stderr参数特殊值,表示重定向标准错误到标准输出 Popen 在一个新进程执行子程序...进程文件句柄继承自父进程。除此之外,stderr还可以是STDOUT,表示标准错误输出重定向到标准输出。 preexec_fn:限于POSIX系统,设置一个可调用对象,先于进程程序执行。...POSIX系统,发送SIGTERM信号到进程Windows系统上会调用TerminateProcess()终止进程 kill():强制终止进程。...如果设置了shell=True,pid表示派生shell进程号 returncode:进程返回码,None表示进程未终止。负数-N表示进程被信号N终止(仅限POSIX)。...如果未捕获标准输出返回None stderr:捕获进程标准错误,默认为byte类型,如果run()函数调用时指定了encoding或errors,或设置了text=True则为string类型。

2.4K10

Python 标准类库-并发执行之multiprocessing-基于进程并行

实践环境 Python3.6 介绍 multiprocessing是一个支持使用类似于线程模块API派生进程包。该包同时提供本地和远程并发,通过使用进程而不是线程,有效地避开了全局解释器锁。...与使用fork或forkserver相比,使用此方法启动进程相当慢。可在Unix和Windows使用Windows默认使用该启动方法。...fork 父进程使用os.fork()来fork Python解释器。进程在开始时实际与父进程相同。父进程所有资源都由进程继承。请注意,安全地fork多线程进程是有问题。...进程不再继承Windows所有父级可继承句柄。 在Unix使用spawn或forkserver启动方法还将启动一个信号量跟踪器进程,该进程跟踪程序进程创建未链接命名信号量。...请注意,如果两个进程(或线程)试图同时读取或写入管道同一端,则管道数据可能会被破坏。当然,同时使用不同管道末端进程不会有破坏数据风险。

54220

Python 执行系统命令

执行命令但无法获取取命令输出时,可以使用 os.system os.system() 是C语言 system() 函数封装,返回命令退出状态码,命令执行结果输出标准输出(stdout/窗口...system函数可以将字符串转化成命令在服务器运行;其原理是每一条system函数执行时,其会创建一个进程在系统执行命令行,进程执行结果无法影响主进程。...在一些复杂场景,我们需要将一个进程执行输出作为另一个进程输入。在另一些场景,我们需要先进入到某个输入环境,然后再执行一系列指令等。...3、Popen.communicate(input=None):与进程进行交互。向stdin发送数据,或stdout和stderr读取数据。可选参数input指定发送到进程参数。...5、Popen.terminate():停止(stop)进程。在windows平台下,该方法将调用Windows API TerminateProcess()来结束进程

1.6K10

使用python执行shell脚本 并动态传参 及subprocess使用详解

负bufsize意味着使用系统默认值,通常意味着完全缓冲。bufsize默认值是0(无缓冲)。 stdin,stdout和stderr分别指定执行程序标准输入,标准输出标准错误文件句柄。...在Popen对象,可以设值subprocess.stdout=PIPE 即通过管道 p.stdout.read()取出 该进程标准输出 preexec_fn 如果将preexec_fn设置为可调用对象...(仅限Windows) Popen对象一些方法 Popen.poll() 检查进程是否终止,返回对象returncode Popen.wait() 等待进程完成,阻塞。...返回returncode Popen.communicate(input=None) 将信息输入到进程stdout和stderr读取数据,直到达到文件结尾。等待进程终止。...返回一个元组(stdout,stderr) 但是读取数据缓存在内存,所以如果数据量很大或者无限,就不要使用这种方法 Popen.pid 返回进程pid Popen.returncode 读取进程状态码

5.2K30

Python用subprocessPopen来调用系统命令

可是这两个命令过于简单,不能完毕一些复杂操作,如给执行命令提供输入或者读取命令输出,推断该命令执行状态,管理多个命令并行等等。...參数Close_sfs:在windows平台下,假设close_fds被设置为True,则新创建进程将不会继承父进程输入、输出、错误管 道。...表示与进程通信标准流。 subprocess.STDOUT 创建Popen对象时,用于初始化stderr參数,表示将错误通过标准输出输出。...Popen.communicate(input=None) 与进程进行交互。向stdin发送数据,或stdout和stderr读取数据。可选參数input指定发送到进程參数。...在异常对象,包 括进程returncode信息。 subprocess模块内容就这么多。在Python手冊,还介绍了怎样使用 subprocess来替换一些老模块,老函数样例。

1.7K20

第十五章 Python进程与多线程

在unix使用SIGTERM信号,在windows使用TerminateProcess()。...相反是乱序。因此join()方法是堵塞父进程,要等待当前进程执行完后才会继续执行下一个进程。否则会一直生成进程去执行任务。 在要求输出情况下使用join()可保证每个结果是完整。...6)进程池map()方法 map()方法是将序列元素通过函数处理返回新列表。...Queue库已经封装到multiprocessing库,在第十章 Python常用标准库已经讲解到Queue库使用,有需要请查看以前博文。 例如:一个进程向队列写数据,一个进程读取队列数据 #!...当你在写多线程程序时候如果输出结果是混乱,这时你应该考虑到在不使用情况下,多个线程运行时可能会修改原有的变量,导致输出不一样。

73610

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

因为不是当前进程读取管道(pipe),如果子进程没有生成足够输出来填充OS管道缓冲区,可能会阻塞子进程。...因为不是当前进程读取管道(pipe),如果子进程没有生成足够输出来填充OS管道缓冲区,可能会阻塞子进程。...因为不是当前进程读取管道(pipe),如果子进程没有生成足够输出来填充OS管道缓冲区,可能会阻塞子进程。...类似在Unix使用os.execvp(),Windows使用CreateProcess()函数。 args 参数值为字符串、序列。默认,如果args是个序列,程序会执行args第一项。...如果进程在timeout(单位 秒)之后依然没终止,则抛出TimeoutExpired 异常,(Python3.3.2发丝。捕获该异常并重试comunicate,不会丢失任何输出

3.8K20

python实现局域网ip地址扫描

python 遍历局域网ip 知道python开始,我视线里就没缺少过他。尤其是现如今开发语言大有傻瓜化趋势。而作为这一趋势领导,脚本语言就显得格外亮眼。...subprocess模块只定义了一个类: Popen。可以使用Popen来创建进程,并与进程进行复杂交互。...表示与进程通信标准流。 subprocess.STDOUT   创建Popen对象时,用于初始化stderr参数,表示将错误通过标准输出输出。...Popen.communicate(input=None)   与进程进行交互。向stdin发送数据,或stdout和stderr读取数据。可选参数input指定发送到进程参数。...Popen.terminate()   停止(stop)进程。在windows平台下,该方法将调用Windows API TerminateProcess()来结束进程

3K10

python—subprocess、gl

像Linux进程那样,一个进程可以fork一个进程,并让这个子进程exec另外一个程序。在Python,我们通过标准subprocess包来fork一个进程,并运行一个外部程序。...subprocess包定义有数个创建进程函数,这些函数分别以不同方式创建进程,所以我们可以根据需要来从中选取一个使用。...()       # 终止进程 child.pid               #存储进程PID 2.进程文本流控制 进程标准输入、标准输出标准错误如下属性分别表示: child.stdin...child1stdout将文本输出到缓存区,随后child2stdin该PIPE中将文本读取走。...child2输出文本也被存放在PIPE,直到communicate()方法PIPE读取出PIPE文本;communicate()是Popen对象一个方法,该方法会阻塞父进程,直到进程完成

1.5K20

python执行DOS命令3种方法小

windows平台下,默认shell由COMSPEC环境变量来指定。 参数stdin, stdout, stderr分别表示程序标准输入、输出、错误句柄。...参数Close_sfs:在windows平台下,如果close_fds被设置为True,则新创建进程将不会继承父进程输入、输出、错误管 道。...我们不能将close_fds设置为True同时重定向进程标准输入、输出与错误(stdin, stdout, stderr)。 如果参数shell设为true,程序将通过shell来执行。...subprocess.STDOUT 创建Popen对象时,用于初始化stderr参数,表示将错误通过标准输出输出。 Popen方法: Popen.poll()  用于检查进程是否已经结束。...向stdin发送数据,或stdout和stderr读取数据。可选参数input指定发送到进程参数。 Communicate()返回一个元组:(stdoutdata, stderrdata)。

2K20

python执行shell命令几个方

file read 对象,对其进行读取 read() 操作可以看到执行输出。...但是无法读取程序执行返回值) 适用于Python2 尝试第三种方案 commands.getstatusoutput() 一个方法就可以获得到返回值和输出,非常好用。...用于指定一个可执行对象(callable object),它将在进程运行之前被调用 close_sfs 在windows平台下,如果close_fds被设置为True,则新创建进程将不会继承父进程输入...所以不能将close_fds设置为True同时重定向进程标准输入、输出与错误(stdin, stdout, stderr)。...universal_newlines 不同系统换行符不同,True -> 同意使用 \n startupinfo 只在windows下有效,将被传递给底层CreateProcess()

3K10

Python调用系统命令六种方法

作为胶水语言,Python可以很方便执行系统命令,Python3常用执行操作系统命令有os.system()、os.popen()、subprocess.popen()、subprocess.call...os.system() system函数可以将字符串转化成命令在服务器运行;其原理是每一条system函数执行时,其会创建一个进程在系统执行命令行,进程执行结果无法影响主进程。...如果mode为’r’,调用该对象read()或readlines()方法可以读取输出内容。...官方推荐使用该模块执行系统命令,subprocess模块通过进程来执行外部指令,并通过input/output/error管道,获取进程执行返回信息。...特定查询空间命令 stdin=None, # 标准输入 键盘 stdout=PIPE, # -1 标准输出(演示器、终端) 保存到管道以便进行操作 stderr=PIPE

3.6K20

pythonsubprocess

python2.7 源码注释(由于能力有限,翻译不太准确): 这个模块允许您开启进程、连接输入、输出和错误管道,并获取他们返回代码。...程序通常执行序列或字符串第一项,但可以通过使用明确参数进行设置。 在UNIX,shell = False(默认):在这种情况下,Popen类使用os.execvp()来执行程序进程。...PIPE创建一个新管道。None,没有重定向;管道将会继承父管道文件句柄。此外,标准错误可以用STDOUT来定义,表明应用程序应该STDOUT捕获到相同文件句柄标准错误数据。...在python程序中都是看作为\n 注意: 这种功能仅仅支持用通用换行符构建python(默认)。同时文件对象标准输出标准输入、标准错误换行符属性,不会被communicate()模块所更新。...communicate(input=None)     与进程相互作用: 发送数据到标准输入。标准输出标准错误读取数据, 直到到达文件尾。等待进程终止。

1.6K30

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

有时候我们需要在程序里执行一些cmd命令,使用os或者其它模块popen方法去执行 这个问题一般是程序内有输入导致,这个输入可以是input(),也可以是其它一些stdin操作(如os.popen...如果是PIPE,则表示需要创建一个新管道,如果是 None,不会做任何重定向工作,进程文件描述符会继承父进程。...另外,stderr值还可以是STDOUT,表示进程标准错误也输出标准输出。 如果把preexec_fn设置为一个可调用对象(比如函数),就会在进程被执行前被调用。...(仅限unix/linux) 如果把close_fds设置成True,unix/linux下会在开进程前把除了0、1、2以外文件描述符都先关闭。在 Windows下也不会继承其他文件描述符。...现在回到我们将要解决问题 已知: 用pyinstaller-w参数打包导致python无法处理输入值(stdin) os.popen 打开管道却需要处理输入值(stdin) 所以,我们不使用os.popen

3.5K30

Python用户定义异常与NZEC错误

用户可以使用异常类创建自己错误。 创建用户定义异常 程序员可以通过创建新异常类来命名自己异常。需要直接或间接Exception类派生异常。...# 类错误是超级类异常派生 class Error(Exception): # Error是异常派生类,但是 #此模块异常基类 pass class TransitionError...以类似的方式,任何异常都可以Python标准异常派生而来。...(一个例子) 在python,通常多个输入之间用逗号分隔,我们使用input()或int(input())进行读取,但是大多数在线编码平台在测试时都会以空格分隔输入,在这种情况下,输入为int(input...())无法正确读取输入并显示NZEC之类错误。

1.6K20

Python用户定义异常与NZEC错误

用户可以使用异常类创建自己错误。 创建用户定义异常 程序员可以通过创建新异常类来命名自己异常。需要直接或间接Exception类派生异常。...# 类错误是超级类异常派生 class Error(Exception): # Error是异常派生类,但是 #此模块异常基类 pass class TransitionError...以类似的方式,任何异常都可以Python标准异常派生而来。...(一个例子) 在python,通常多个输入之间用逗号分隔,我们使用input()或int(input())进行读取,但是大多数在线编码平台在测试时都会以空格分隔输入,在这种情况下,输入为int(input...())无法正确读取输入并显示NZEC之类错误。

11720

Python用户定义异常与NZEC错误

用户可以使用异常类创建自己错误。 创建用户定义异常 程序员可以通过创建新异常类来命名自己异常。需要直接或间接Exception类派生异常。...# 类错误是超级类异常派生 class Error(Exception): # Error是异常派生类,但是 #此模块异常基类 pass class TransitionError...以类似的方式,任何异常都可以Python标准异常派生而来。...(一个例子) 在python,通常多个输入之间用逗号分隔,我们使用input()或int(input())进行读取,但是大多数在线编码平台在测试时都会以空格分隔输入,在这种情况下,输入为int(input...())无法正确读取输入并显示NZEC之类错误。

1.5K10
领券