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

在使用Popen创建的进程中使用Popen不会执行任何操作

在使用Popen创建的进程中,使用Popen不会执行任何操作的原因是因为Popen只是创建了一个子进程对象,并没有真正执行任何命令或操作。Popen是subprocess模块中的一个函数,用于创建一个新的进程对象,可以通过该对象来与子进程进行交互。

Popen函数的常用参数有command、args、shell、stdin、stdout、stderr等。其中,command或args参数用于指定要执行的命令或程序,shell参数用于指定是否通过shell来执行命令,stdin、stdout、stderr参数用于指定子进程的输入、输出和错误流。

但是需要注意的是,使用Popen创建的进程对象并不会自动执行命令或操作,需要通过调用进程对象的方法来实现。常用的方法有communicate()、wait()、poll()等。

  • communicate()方法用于与子进程进行交互,可以向子进程的stdin发送数据,并获取子进程的stdout和stderr输出。示例代码如下:
代码语言:txt
复制
import subprocess

# 创建进程对象
process = subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE)

# 与子进程交互
output, error = process.communicate()

# 打印子进程的输出
print(output.decode('utf-8'))
  • wait()方法用于等待子进程结束,并返回子进程的返回码。示例代码如下:
代码语言:txt
复制
import subprocess

# 创建进程对象
process = subprocess.Popen(['ls', '-l'])

# 等待子进程结束
process.wait()

# 打印子进程的返回码
print(process.returncode)
  • poll()方法用于检查子进程是否结束,如果结束则返回子进程的返回码,否则返回None。示例代码如下:
代码语言:txt
复制
import subprocess

# 创建进程对象
process = subprocess.Popen(['ls', '-l'])

# 检查子进程是否结束
while process.poll() is None:
    # 子进程未结束,可以进行其他操作
    pass

# 打印子进程的返回码
print(process.returncode)

需要注意的是,使用Popen创建的进程对象默认是同步执行的,即主进程会等待子进程执行完毕后再继续执行。如果需要异步执行,可以使用多线程或多进程的方式来实现。

在腾讯云的产品中,与进程相关的服务有云服务器CVM、容器服务TKE、函数计算SCF等。具体的产品介绍和链接地址可以参考腾讯云官网的相关文档。

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

相关·内容

Python模块之subprocess

一 简介 在使用Python 开发MySQL自动化相关的运维工具的时候,遇到一些有意思的问题,本文介绍Python的 subprocess 模块以及如何和MySQL交互具体操作,如启动 ,关闭 ,备份数据库...二 基础知识 Python2.4引入subprocess模块来管理子进程,可以像Linux 系统中执行shell命令那样fork一个子进程执行外部的命令,并且可以连接子进程的output/input...subprocess包中的函数创建子进程执行命令的时候,需要考虑 1) 在创建子进程之后,父进程是否暂停,并等待子进程运行。...与上面第二部分介绍的三个函数不同,subprocess.Popen() fork子进程之后主进程不会等待子进程结束,而是直接执行后续的命令。...注意:如果希望通过进程的stdin向其发送数据,在创建Popen对象的时候,参数stdin必须被设置为PIPE。

2K10

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

使用os.system("cmd") 特点是执行的时候程序会打出cmd在Linux上执行的信息。 import os os.system("ls")   2....使用Popen模块产生新的process 现在大部分人都喜欢使用Popen。Popen方法不会打印出cmd在linux上执行的信息。的确,Popen非常强大,支持多种参数和模式。...参数Close_sfs:在windows平台下,如果close_fds被设置为True,则新创建的子进程将不会继承父进程的输入、输出、错误管 道。...注意:如果希望通过进程的stdin向其发送数据,在创建Popen对象的时候,参数stdin必须被设置为PIPE。...使用commands.getstatusoutput方法 这个方法也不会打印出cmd在linux上执行的信息。这个方法唯一的优点是,它不是一个阻塞的方法。即没有Popen函数阻塞的问题。

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

    类似在Unix上使用os.execvp(),Windows上使用CreateProcess()函数。 args 参数值为字符串、序列。默认的,如果args是个序列,程序会执行args中第一项。...Windows平台,如果close_fds为True,那么子进程不会继承任何句柄。...函数返回一个元组(stdoutdata, stderrdata) 注意,如果想发送数据到进程管道,必须在创建Popen对象时使用stdin=PIPE,类似的如果想从结果元组中获取非None值数据,创建...如果进程在timeout(单位 秒)之后依然没终止,则抛出TimeoutExpired 异常,(Python3.3.2中发丝。捕获该异常并重试comunicate,不会丢失任何输出。...如果超过timeout,子进程不会被kill掉,所以为了完成交互,恰当的清理友好执行的程序,应该kill子进程。

    4.2K20

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

    subprocess.Popen 是 Python 中用于执行外部命令或程序的模块之一。它提供了创建子进程并与之交互的灵活方式。...以向 subprocess.Popen 传递一个命令字符串或命令列表,它将调用操作系统的 shell 来执行该命令。...项目中需要在 Python 的代码中执行一些系统指令,例如调用项目中的某个可执行程序,所以就使用了 subprocess.Popen 方法。...{cmds}") 这段代码是一个 Python 函数,用于执行外部命令并捕获其输出。接收传入的系统命令,使用 subprocess.Popen 函数创建子进程来执行指定的命令。...subprocess.Popen 提供了更多的灵活性,但需要你手动管理子进程的输入、输出和状态,因此在处理更复杂的子进程交互时可能需要更多的工作。

    2K10

    python之调用系统命令 原

    一、python中执行cmd 目前我使用到的python中执行cmd的方式有三种 使用os.system("cmd") 该方法在调用完shell脚本后,返回一个16位的二进制数,低位为杀死所调用脚本的信号号码...Popen方法不会打印出cmd在linux上执行的信息。的确,Popen非常强大,支持多种参数和模式。使用前需要from subprocess import Popen, PIPE。...参数Close_sfs:在windows平台下,如果close_fds被设置为True,则新创建的子进程将不会继承父进程的输入、输出、错误管 道。...return -1 使用commands.getstatusoutput方法 这个方法也不会打印出cmd在linux上执行的信息。这个方法唯一的优点是,它不是一个阻塞的方法。...不管参数是一个路径还是文件 os.system() 函数用来运行shell命令 3.os进程 os模块包装了不同操作系统的通用接口,使用户在不同操作系统下,可以使用相同的函数接口,返回相同结构的结果

    2.3K40

    Python用subprocess的Popen来调用系统命令

    这时subprocess中的Popen命令就能有效的完毕我们须要的操作。在这里对Popen予以简介。...在windows操作系统上,Popen通过调用 CreateProcess()来创建子进程,CreateProcess接收一个字符串參数,假设args是序列类型,系统将会通过 list2cmdline(...參数Close_sfs:在windows平台下,假设close_fds被设置为True,则新创建的子进程将不会继承父进程的输入、输出、错误管 道。...注意:假设希望通过进程的stdin向其发送数据,在创建Popen对象的时候,參数stdin必须被设置为PIPE。...在异常对象中,包 括进程的returncode信息。 subprocess模块的内容就这么多。在Python手冊中,还介绍了怎样使用 subprocess来替换一些老的模块,老的函数的样例。

    1.9K20

    python模块--subprocess

    代码中去执行一些系统命令,在执行python程序时,该模块会创建出一个子进程,来运行外部程序。     ...subprocess.check_output()     不会将系统命令的执行结果直接打印出来,返回一个bytes类型的对象,该对象包含了系统命令的执行结果,如果执行失败会抛出subprocess.CalledProcessError...,Popen()创建的子进程不会被等待,相当于异步执行。    ...1.Popen()创建的对象有多个方法,可以针对子进程执行个性化操作,例如: import subprocess import time time.clock() POPEN1 = subprocess.Popen... at 0x02230810> 0.06108553745727746 #从时间上看,主程序很快就结束了 Popen()创建的对象方法包括: POPEN1.poll() # 检查子进程状态 POPEN1

    67410

    Ruby执行shell命令的六种方法

    exec exec会将指定的命令替换掉当前进程中的操作,指定命令结束后,进程结束。...system system和exec相似,但是system执行的命令不会是在当前进程,而是在一个新创建的进程。system会返回布尔值来表明命令执行结果是成功还是失败。...通过检测退出的状态码我们可以在ruby脚本中抛出异常或者进行重试操作。 注:在Unix-like系统中进程的退出状态码以0和非0表示,0代表成功,非0代表失败。...反引号(`) 使用反引号是shell中常用的获取命令输出内容的方法,在ruby中也是可以,而且一点都需要做改变。使用反引号执行命令也会将命令在另一个进程中执行。...IO#popen IO#popen也是一种执行命令的方法,其命令也是在另外的进程中执行。使用popen你可以像操作IO对象一样处理标准输入和输出。

    3.3K20

    python中的subprocess

    程序通常执行序列或字符串的第一项,但可以通过使用明确的参数进行设置。 在UNIX上,shell = False(默认):在这种情况下,Popen类使用os.execvp()来执行程序的子进程。...如果参数是一个序列,第一项指定命令字符串,其他的将被视为附加的shell命令的参数。 在Windows:Popen类通过使用CreateProcess()执行这个子进程来对字符串操作。...bufsize,如果给定了,与内置行数open()的参数有相同意义:0意味着无缓冲的,1意味着线性缓冲,其他任何正值意味着使用的缓冲区(大约)大小。...()在被调用过程中返回一个非零的返回码则会抛出‘CalledProcessError’ 安全 ============== 和其他popen函数不同,它不会隐式的执行/bin/sh,这意味着所有的字符,...Unix系统中, popen2 也可以在没有shell介入的情况下直接传递给程序以序列形式执行命令行.

    1.6K30

    Python 执行系统命令

    系统命令 作为胶水语言,Python可以很方便的执行系统命令,Python3中常用的执行操作系统命令有以下方式 os.system() os.popen() subprocess 模块 os.system...system函数可以将字符串转化成命令在服务器上运行;其原理是每一条system函数执行时,其会创建一个子进程在系统上执行命令行,子进程的执行结果无法影响主进程。...用法: child = subprocess.Popen(["cmd","arg1"...]) 在一些复杂场景中,我们需要将一个进程的执行输出作为另一个进程的输入。...在另一些场景中,我们需要先进入到某个输入环境,然后再执行一系列的指令等。这个时候我们就需要使用到suprocess的Popen()方法。...注意:如果希望通过进程的stdin向其发送数据,在创建Popen对象的时候,参数stdin必须被设置为PIPE。

    1.7K10

    Python调用系统命令的六种方法

    作为胶水语言,Python可以很方便的执行系统命令,Python3中常用的执行操作系统命令有os.system()、os.popen()、subprocess.popen()、subprocess.call...os.system() system函数可以将字符串转化成命令在服务器上运行;其原理是每一条system函数执行时,其会创建一个子进程在系统上执行命令行,子进程的执行结果无法影响主进程。...官方推荐使用该模块执行系统命令,subprocess模块通过子进程来执行外部指令,并通过input/output/error管道,获取子进程的执行的返回信息。...好处在于:运用对线程的控制和监控,将返回的结果赋于一变量,便于程序的处理。 subprocess.Popen() 使用Popen可以创建进程,并与进程进行复杂的交互。...run默认不会返回输出,只返回命令和执行状态。

    4.1K20

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

    这里的内容以Linux进程基础和Linux文本流为基础。subprocess包主要功能是执行外部的命令和程序。比如说,我需要使用wget下载文件。我在Python中调用wget程序。...subprocess包中定义有数个创建子进程的函数,这些函数分别以不同的方式创建子进程,所以我们可以根据需要来从中选取一个使用。...使用subprocess包中的函数创建子进程的时候,要注意: 1) 在创建子进程之后,父进程是否暂停,并等待子进程运行。 2) 函数返回什么 3) 当returncode不为0时,父进程如何处理。...当我们想要更个性化我们的需求的时候,就要转向Popen类,该类生成的对象用来代表子进程。 与上面的封装不同,Popen对象创建后,主程序不会自动等待子进程完成。...print("parent process") 此外,你还可以在父进程中对子进程进行其它操作,比如我们上面例子中的child对象: child.poll()           # 检查子进程状态 child.kill

    2.8K60

    用Python复制文件的九种方法

    接下来,它不会对特殊文件进行任何不同的处理,也不会将它们复制为新的特殊文件。 所述的CopyFile()方法利用较低级别的功能的copyfileobj()的下方。...Os System()方法 它是运行任何系统命令的最常见方式。使用system()方法,可以在subshell中调用任何命令。在内部,这种方法会调用标准的C库函数。 此方法返回命令的退出状态。...8.使用子进程的Call()方法在Python中复制一个文件 子进程模块提供了一个简单的界面来处理子进程。它使我们能够启动子进程,附加到其输入/输出/错误管道,并检索返回值。...子流程模块旨在替代传统模块和功能,如*os.system,os.spawn ,os.popen ,popen2。。 它公开一个call()方法来调用系统命令来执行用户任务。 ?...9.使用子进程的Check_output()方法在Python中复制文件 使用子进程的check_output()方法,可以运行外部命令或程序并捕获其输出。它还支持管道。 ?

    2K70

    自带的 print 函数居然会报错?

    这里画个图能更好地理解其中的原理: 在这里的使用场景中并没有获取 popen() 的返回值,所以 command 的执行本质上是异步的; 也就是说当 task.py 执行完毕后会自动关闭读取端的管道。...线上修复时我没有采用这个方案,为了方便查看日志,还是使用标准的日志框架将日志输出到了 es 中,方便统一在 kibana 中进行查看。 由于日志框架并没有使用到管道,所以自然也不会有这个问题。...比如这次提到的 Python 中的 os.popen() 就是创建了一个子进程,既然是子进程那肯定是需要和父进程进行通信才能达到协同工作的目的。...: 但相反的,子进程中打开的文件父进程是不会有的,这个应该很容易理解。...总结 一些基础知识在排查一些诡异问题时显得尤为重要,比如本次涉及到的父子进程的管道通信,最后来总结一下: os.popen() 函数是异步执行的,如果需要拿到子进程的输出,需要自行调用 read() 函数

    70310

    笔记 | 如何在Python下调用Linux的Shell命令?

    这些方法适用于在子进程中调用外部程序的情况,因为外部程序会替换当前进程的代码,不会返回。...( 这个看了点 help(os) --> search "exec" 的相关介绍,但是没太搞明白咋使用) 1.2. os模块的system方法 system方法会创建子进程运行外部程序,方法只返回外部程序的运行结果...有一个用Python实现的并行ssh工具—mssh,代码很简短,不过很有意思,它在线程中调用subprocess启动子进程来干活。...而且popen还有三个变种都是在I/O处理上有轻微不同。假如你通过一个字符串传递所有东西,你的命令会传递给shell;如果你通过一个列表传递他们,你不用担心逃避任何事。 4.3....但是相比之下它使用一个统一的类包括4中不同的popen函数还是不错的。 4.4. 关于subprocess.call subprocess模块的call函数。

    4.7K20

    python的subprocess模块

    1 os与commands模块 ​ 2 subprocess模块 ​ 3 subprocess.Popen类 我们几乎可以在任何操作系统上通过命令行指令与操作系统进行交互,比如Linux平台下的shell...subprocess模块提供了一种一致的方法来创建和处理附加进程,与标准库中的其它模块相比,提供了一个更高级的接口。...subprocess.Popen(): 在一些复杂场景中,我们需要将一个进程的执行输出作为另一个进程的输入。在另一些场景中,我们需要先进入到某个输入环境,然后再执行一系列的指令等。...如果env=None,则默认从父进程继承环境变量 universal_newlines:不同系统的的换行符不同,当该参数设定为true时,则表示使用\n作为换行符 示例1,在/root下创建一个suprocesstest...平台下有效,用于指定一个可执行对象,它将在子进程运行之前被调用 close_sfs:在Windows平台下,如果close_sfs被设置为True,则新创建的子进程将不会继承父进程的输入、输出、错误管道

    3.1K20

    耗时两天,优化失败

    于是,为了验证文章的内容是否与本次遇到的问题一致,在本地写了一个简单的测试用例,测试代码中仅仅包含popen()函数,编译,然后使用starce ....vfork()的父子进程是共享数据的,也就是说使用vfork()产生的子进程不会复制父进程的资源,而是与父进程共享同一份资源,所以在子程序中修改变量,父进程的变量也会被修改。...vfork()用于创建一个新进程,而新进程的目的是exec一个新程序。vfork()会挂起父进程直到子进程终止或者运行了一个新的可执行文件的映像。...vfork()和fork()一样都创建一个子进程,但是它并不将父进程的地址空间完全复制到子进程中,因为子进程会立即调用exec或exit,于是也就不会存放该地址空间。...最重要的一个原因是使用fork()的popen(),在创建子进程的时候会进行资源复制,即使使用写时复制技术,如果没有足够的内存来复制父进程使用的内存,fork也会失败。

    53420

    Python调用linux系统命令--使

    在python 中调用系统命令,如果使用subprocess.Popen() 模块,按照命令参数的的形式,可以分两种: 把命令当作字符串传给subprocess.Popen()  把命令保存到一个元组,...list 的序列,再传给subprocess.Popen()  subprocess模块使用Popen类创建子进程执行命令,首先subprocess.Popen() 的原型: subprocess.Popen...注意:如果需要使用communication() 方法与子进程通信,那么在创建子进程时,stdin, stdout, stderr, 都需要用subprocess.PIPE 初始化。...In [127] 行:创建Popen 对象,Popen 以子进程执行 'ls  -l  .'...多条命令连通:      在linux 下,经常使用管道将多条命令连在一起,前一条指令的执行结果作为后一条指令的输入,使用Popen 也可以实现。 ? 首先,查看test.txt 文件的内容。

    5.1K20
    领券