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

模拟Popen以根据call_args返回不同的结果

模拟Popen是指在编程中模拟Python的subprocess模块中的Popen类,以便根据call_args返回不同的结果。Popen类用于在子进程中执行外部命令。

在模拟Popen时,可以使用Python的unittest模块中的mock库来实现。mock库提供了Mock类,可以用于模拟对象的行为。

以下是一个示例代码,演示如何模拟Popen以根据call_args返回不同的结果:

代码语言:python
代码运行次数:0
复制
from unittest.mock import Mock

# 模拟Popen类
class MockPopen(Mock):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.call_args = None

    def __call__(self, *args, **kwargs):
        self.call_args = (args, kwargs)
        return self

    def communicate(self, input=None):
        # 根据call_args返回不同的结果
        if self.call_args[0][0] == 'command1':
            return b'Output 1', b'Error 1'
        elif self.call_args[0][0] == 'command2':
            return b'Output 2', b'Error 2'
        else:
            return b'', b''

# 使用模拟的Popen类
mock_popen = MockPopen()
result = mock_popen('command1').communicate()
print(result)  # 输出 (b'Output 1', b'Error 1')

result = mock_popen('command2').communicate()
print(result)  # 输出 (b'Output 2', b'Error 2')

在上述代码中,我们定义了一个名为MockPopen的类,继承自Mock类。在该类中,我们重写了__call__方法,以记录调用Popen时传入的参数,并返回自身。然后,我们重写了communicate方法,根据传入的命令参数返回不同的结果。

通过使用模拟的Popen类,我们可以根据传入的命令参数来模拟不同的结果。这在测试过程中非常有用,可以模拟不同的场景和返回值,以确保代码在各种情况下都能正常工作。

腾讯云相关产品和产品介绍链接地址:

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

相关·内容

Python 技术篇-通过管道命令获取cmd执行结果,获取os.system()、subprocess.Popen()执行命令返回结果

正常 os.system() 执行完后只会返回个执行状态值,返回 0 表示执行成功,1 表示执行失败。...如果想要获取到执行后结果集,就需要用到管道命令 os.popen(),然后用 read() 方法可以读到返回结果。subprocess.Popen() 命令也可以获取返回结果。...os.system() 方法获取命令返回结果演示: # -*- coding: UTF8 -*- import os cmd = os.popen('netstat -nao | findstr "...%s"' % str("5003")) print("读取cmd执行结果为:\n" + cmd.read()) 执行后效果图: subprocess.Popen() 方法获取命令返回结果演示: #...subprocess.PIPE) cmd_result = "" for i in cmd_p.stdout.readlines(): cmd_result += i.decode(); print("读取cmd执行结果

8.2K30
  • 开发神技能 | Python Mock 入门

    运维行业正在变革,推荐阅读:30万年薪Linux运维工程师成长魔法 Mock是什么 Mock这个词在英语中有模拟这个意思,因此我们可以猜测出这个库主要功能是模拟一些东西。...准确说,Mock是Python中一个用于支持单元测试库,它主要功能是使用mock对象替代掉指定Python对象,达到模拟对象行为。...简单说,mock库用于如下场景: 假设你开发项目叫a,里面包含了一个模块b,模块b中一个函数c(也就是a.b.c)在工作时候需要调用发送请求给特定服务器来得到一个JSON返回值,然后根据这个返回值来做处理...当mock对象被调用时,如果该函数返回值不是DEFAULT时,那么该函数返回值作为mock对象调用返回值。 其他参数请参考官方文档。...patch.object和patch效果是一样,只不过用法有点不同

    1.5K90

    开发神技能 | Python Mock 入门

    Mock是什么 Mock这个词在英语中有模拟这个意思,因此我们可以猜测出这个库主要功能是模拟一些东西。...准确说,Mock是Python中一个用于支持单元测试库,它主要功能是使用mock对象替代掉指定Python对象,达到模拟对象行为。...简单说,mock库用于如下场景: 假设你开发项目叫a,里面包含了一个模块b,模块b中一个函数c(也就是a.b.c)在工作时候需要调用发送请求给特定服务器来得到一个JSON返回值,然后根据这个返回值来做处理...当mock对象被调用时,如果该函数返回值不是DEFAULT时,那么该函数返回值作为mock对象调用返回值。 其他参数请参考官方文档。...patch.object和patch效果是一样,只不过用法有点不同

    87230

    2022最新出炉整理软件测试常见面试题附答案

    Q4、你觉得 bugzilla 在使用过程中,有什么问题? 参考答案: 界面不稳定; 根据需要配置它不同部分,过程很烦琐。...Functional testing (功能测试),也称为 behavioral testing(行为测试),根据产品特征、操作描述和用户方案,测试一个产品特性和可操作行为确定它们满足设计需求。...SQL中连接按结果集分为:内连接,外连接,交叉连接 Q20、统计python 源代码文件中代码行数,去除注释,空行,进行输出? Q21、python 调用cmd 并返回结果?...python OS 模块。 OS 模块调用CMD 命令有两种方式:os.popen(),os.system(). 都是用当前进程来调用。 os.system 是无法获取返回。...OS.popen返回,如何获取返回值。如 p=os.popen(cmd) print p.read().得到是个字符串。 这两个都是用当前进程来调用,也就是说它们都是阻塞式

    4K31

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

    这里内容Linux进程基础和Linux文本流为基础。subprocess包主要功能是执行外部命令和程序。比如说,我需要使用wget下载文件。我在Python中调用wget程序。...subprocess包中定义有数个创建子进程函数,这些函数分别不同方式创建子进程,所以我们可以根据需要来从中选取一个使用。...subprocess.check_output() 父进程等待子进程完成 返回子进程向标准输出输出结果 检查退出信息,如果returncode不为0,则举出错误subprocess.CalledProcessError...,该对象包含有returncode属性和output属性,output属性为标准输出输出结果,可用try...except...来检查。...当我们想要更个性化我们需求时候,就要转向Popen类,该类生成对象用来代表子进程。 与上面的封装不同Popen对象创建后,主程序不会自动等待子进程完成。

    2.8K60

    自带 print 函数居然会报错?

    任务运行时偶尔会出现一些异常: 因为我在不同地方都有打印日志,导致每次报错地方都不太一样,从而导致程序运行结果非常诡异;有时候是这段代码没有运行,下一次就可能是另外一段代码没有触发。...popen 原理 为此我在开发环境模拟出了异常: test.py: import time if __name__ == '__main__': time.sleep(20) print...根据官方文档解释,该函数会执行 fork 一个子进程执行 command 这个命令,同时将子进程标准输出通过管道连接到父进程; 也就该方法返回文件描述符。...这里画个图能更好地理解其中原理: 在这里使用场景中并没有获取 popen() 返回值,所以 command 执行本质上是异步; 也就是说当 task.py 执行完毕后会自动关闭读取端管道。...父进程: 子进程: 可以看到子进程标准输出与父进程关联,也就是 popen() 所返回那个文件描述符。

    69810

    Python模块之subprocess用法实例详解

    subprocess包中定义有数个创建子进程函数,这些函数分别不同方式创建子进程,所欲我们可以根据需要来从中选取一个使用。...,返回 一个元组形式结果,第一个元素是命令执行状态,第二个为执行结果 #执行正确 >>> subprocess.getstatusoutput('pwd') (0, '/root') #执行错误 >>...,放回执行结果 >>> subprocess.getoutput('pwd') '/root' 6、subprocess.check_output() 执行命令,返回执行结果,而不是打印 >>> res...= subprocess.check_output("pwd") >>> res b'/root\n' # 结果字节形式返回 四、subprocess.Popen() 其实以上subprocess使用方法...原来这个是一个管道,这个需要画一个图来解释一下: 4、poll() 定时检查命令有没有执行完毕,执行完毕后返回执行结果状态,没有执行完毕返回None >>> res = subprocess.Popen

    25.7K32

    【计网】从零开始使用TCP进行socket编程 ---服务端业务模拟Xshell

    ,并创建进程去执行,然后将结果通过文件返回!...2.1 整体框架设计 首先我们要做到工作是将各个模块进行解耦: TcpServer类只负责获取客户端与服务端连接。进行accept接收客户端连接,然后去执行回调函数任务,再将结果返回给客户端。...Command类负责对字符串指令进行执行,并将结果返回! 为了做到这样效果,TcpServer类中需要加入回调函数,在构造时就确定好回调函数,然后通过新线程去执行回调函数!...函数中执行任务就去从连接流中获取客户端传入数据,通过Execute函数去执行指令任务,并返回对应结果!...; } // 开始执行指令 FILE *fp = popen(command.c_str(), "r"); // 读方式进行 // 读取结果

    10710

    python中adb有什么功能

    ADB是Android SDK中一个工具, 使用ADB可以直接操作管理Android模拟器或者真实Andriod设备。...ADB主要功能有: 1、在Android设备上运行Shell(命令行) 2、管理模拟器或设备端口映射 3、在计算机和设备之间上传/下载文件 4、将电脑上本地APK软件安装至Android模拟器或设备上...两者区别就是前者无法获取到返回值,后者可以获取到返回值。 os.popen()返回是file对象,可以直接利用read()方法读取。...这里需要再说明一下adb devices 命令结果返回是一次性,所以我们用read方法读取数据是没有问题,然而adb命令里还有一些是实时返回结果,比如输出手机日志命令logcat,结果会不断打印出来当前设备操作日志信息内容...,这种类型命令我们在python中如果需要获取打印结果,如果还是用read方法的话,等待结果返回时间会非常长,这里我们就要换一种方法读取结果,写法如下。

    1.4K10

    笔记 | 如何在Python下调用LinuxShell命令?

    > 使用os.system调用一个没有返回结果命令,返回值为256~ >>> 注意:上面说了,此方法只返回外部程序结果,也就是os.system结果,所以如果你想接收命令返回值,接着向下看~ 1.3.... os模块popen方法 当需要得到外部程序输出结果时,本方法非常有用。...Haha,there is the log 2. commands模块 使用commands模块getoutput方法,这种方法同popend区别在于popen返回是一个文件句柄,而本方法将外部程序输出结果当作字符串返回...关于os.popen 使用stream = os.popen("some_command with args")也能做与os.system一样事,与os.system不同是os.popen会给你一个像文件对象从而你可以使用它来访问哪个程序标准输入...但是相比之下它使用一个统一类包括4中不同popen函数还是不错。 4.4. 关于subprocess.call subprocess模块call函数。

    4.6K20

    Python 执行系统命令

    返回值是指令运行后返回状态码,0表示指令成功执行,1表示失败,256表示没有返回结果,该方法适用于系统命令不需要输出内容场景。...好处在于:运用对线程控制和监控,将返回结果赋于一变量,便于程序处理。 subprocess.Popen() 使用Popen可以创建进程,并与进程进行复杂交互。...如果env=None,则默认从父进程继承环境变量 universal_newlines 不同系统换行符不同,当该参数设定为true时,则表示使用\n作为换行符。..., 执行指定命令, 等待命令执行完成后返回一个包含执行结果CompletedProcess类实例。...-a'等错误 # 此时有两种处理办法,一种是写成空格为分割列表形式。

    1.7K10

    Python调用外部系统命令

    利用Python调用外部系统命令方法可以提高编码效率。调用外部系统命令完成后可以通过获取命令执行返回结果码、命令执行输出结果进行进一步处理。...默认值为None,表示子进程环境变量将从父进程中继承。Universal_newlines 不同操作系统下,文本换行符是不一样。...调用外部系统命令,返回命令结果码,但是无法获取命令执行输出结果,输出结果直接打印到屏幕终端。...调用外部系统命令,返回命令执行输出结果,但不返回结果吗import os#学习中遇到问题没人解答?...output = commands.getstatusoutput('ping -n 2 -w 3 192.168.1.104')print (retcode)print (output)总结 在编写程序时可根据使用场景来选择不同

    26720

    python统计httpd 进程内存占

    命令,需要使用subprocess 模块 """定义一个函数,用于获取所有的httpd pid号""" def  getPid():     p = Popen(["pidof", "httpd... 命令,需要使用subprocess 模块 import  os """定义一个函数,用于获取所有的httpd pid号""" def  getPid():     p = Popen(["pidof...,保存在一个list     return pids      """ 定义一个函数,统计所有httpd 进程内存 参数:pids 是getPid() 返回列表 """ def parsePidFile...VmRSS"开头行                     mem = int(line.split()[1]) #空格分割,返回第二部分,内存数                     sum +...2.4 测试 安装一个elinks 工具,访问apache 看看内存百分比是否会增高, yum install elinks 用elinks 访问,模拟测试都是在本机进行: elinks   http:

    1.4K20

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

    Python与其他编程语言交互,主要有如下两种方法: (1)调用动态库,如.dll,.so等; (2)直接执行外部命令,并接收外部命令返回结果; 第1种方法我会在后面的文章中详细讨论,本文主要讲解如何使用...popen函数还有其他3种变体,它们对I/O处理略有不同。如果将所有内容都作为字符串传递,那么命令将传递到Shell程序;如果将它们作为列表传递,则无需担心转义任何内容。..., "-l"])\n', '8:os.system("cat command.py | grep -n subprocess > result.txt")\n'] 我们可以看到,readlines方法列表形式返回命令执行结果...方法读取了ls命令返回结果所有行,并将这些内容输出到Console。...Popen类相对于popen函数优势是将所有的选项都统一放在了Popen类中,而不是需要4个不同popen函数完成这些工作。 4.call函数 来自subprocess模块call函数。

    62730

    【愚公系列】2021年12月 Python教学课程 26-系统编程

    下面表格形式,列举 os 模块中常用方法和变量,及其用途解释。 方法和变量 用途 os.name 查看当前操作系统名称。windows 平台下返回‘nt’,Linux 则返回‘posix’。...在不同系统中行尾结束符是不同,例如在 Windows 下为‘\r\n’。...简而言之,popen 也可以运行操作系统命令,并通过 read()方法将命令结果返回,不像 system 只能看不能存,这个能存! >>> os.popen('ipconfig') <os....,在 windows 中,args 和 shell 参数组合比较复杂,根据命令不同不同情况。...获取执行结果 run()方法返回是一个 CompletedProcess 类型对象,不能直接获取我们通常想要结果

    88320

    python中执行shell命令几个方

    最近有个需求就是页面上执行shell命令,第一想到就是os.system, 代码如下: os.system('cat /proc/cpuinfo') 但是发现页面上打印命令执行结果 0或者1,当然不满足需求了...尝试第二种方案 os.popen() 代码如下: output = os.popen('cat /proc/cpuinfo') print output.read() 通过 os.popen() 返回是...) '/bin/ls' >>> commands.getstatus('/bin/ls') '-rwxr-xr-x 1 root 13352 Oct 14 1994 /bin/ls' 最后页面上还可以根据返回值来显示命令执行结果...(["ls", "-l"]) subprocess.check_call("exit 1", shell=True) (3) check_output 执行命令,如果执行成功则返回执行结果,否则抛异常...universal_newlines 不同系统换行符不同,True -> 同意使用 \n startupinfo 只在windows下有效,将被传递给底层CreateProcess()

    3K10
    领券