首页
学习
活动
专区
圈层
工具
发布

调用 subprocess 时小心 shell=True

小心调用 subprocess,避免因 shell=True 而命令行解析错误 Python 中的 subprocess 模块可以轻松实现执行外部命令和进程的功能。...我们经常会用它来调用一些命令行工具的功能。但是在使用 subprocess 调用复杂命令时,有一个容易犯但影响比较大的错误 - 使用shell=True参数,导致命令行解析错误,子进程执行失败。...这个命令作为一个字符串传给 shell 执行,导致命令行被错误解析,子进程实际上失败执行。...解决方法也很简单,只需要删除 shell=True 参数,直接传入命令列表: ret = subprocess.call(cmd, cwd="suites") 这样,命令行被正确解析为多个参数,子进程执行成功...举例2 再举一个例子,一次我希望通过 subprocess 执行 ps -ef | grep python 查找所有 Python 进程,代码如下: cmd = "ps -ef | grep python

1.1K20

python中执行shell命令的几个方

file read 的对象,对其进行读取 read() 的操作可以看到执行的输出。...但是无法读取程序执行的返回值) 适用于Python2 尝试第三种方案 commands.getstatusoutput() 一个方法就可以获得到返回值和输出,非常好用。...用于指定一个可执行对象(callable object),它将在子进程运行之前被调用 close_sfs 在windows平台下,如果close_fds被设置为True,则新创建的子进程将不会继承父进程的输入...shell 同上 cwd 用于设置子进程的当前目录 env 用于指定子进程的环境变量。如果env = None,子进程的环境变量将从父进程中继承。...函数,用于设置子进程的一些属性,如:主窗口的外观,进程的优先级等等 createionflags 同上 import subprocess ret1 = subprocess.Popen(["mkdir

3.3K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Python学习笔记—第一章—Pytho

    书目:Python(Unix和Linux系统管理指南) 学习日期:20120627 知识点总结: Python的优势: 既简单易学,也可以完成任何复杂任务 可读性好(严格的代码缩进格式) 支持面向对象编程...(OOP) 强大的Python社区 强大的Python标准库和大量第三方软件包(PyPI) 基础知识: Python的交互式shell:IPython 在Python中执行命令: subprocess...模块:这个模块来产生子进程,并连接到子进程的标准输入 /输出/错误中去,还可以得到子进程的返回值 实例:subprocess.call(["ls","-l"])或subprocess.call([uname...在Python中使用函数: Python中,嵌套代码是通过统一的缩进格式来维护的,常用tab来实现缩进 函数调用方法:main() 如果没有流程控制或main函数,所有代码在被加载时就会被立即执行,适用于一次性执行脚本...若计划创建一个可重复使用的工具,则应该创建函数,封装指定的功能操作,然后通过main函数来执行整个脚本 通过import语句实现代码复用: 在Python中,一个模块对应一个文件,反之亦然 若希望模块既可以作为一个脚本从命令行直接执行

    46910

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

    这里的内容以Linux进程基础和Linux文本流为基础。subprocess包主要功能是执行外部的命令和程序。比如说,我需要使用wget下载文件。我在Python中调用wget程序。...在Python中,我们通过标准库中的subprocess包来fork一个子进程,并运行一个外部的程序(fork,exec见Linux进程基础)。...subprocess包中定义有数个创建子进程的函数,这些函数分别以不同的方式创建子进程,所以我们可以根据需要来从中选取一个使用。...使用subprocess包中的函数创建子进程的时候,要注意: 1) 在创建子进程之后,父进程是否暂停,并等待子进程运行。 2) 函数返回什么 3) 当returncode不为0时,父进程如何处理。...child2的输出文本也被存放在PIPE中,直到communicate()方法从PIPE中读取出PIPE中的文本。

    3.1K60

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

    阅读大概需要5分钟 zenRRan: 昨天应导师要求,需要写很多python脚本在linux下,这样就会用到如何在python下调用linux命令。 这里有篇比较全的文章,推荐给大家!...这些方法适用于在子进程中调用外部程序的情况,因为外部程序会替换当前进程的代码,不会返回。...有一个用Python实现的并行ssh工具—mssh,代码很简短,不过很有意思,它在线程中调用subprocess启动子进程来干活。...但是相比之下它使用一个统一的类包括4中不同的popen函数还是不错的。 4.4. 关于subprocess.call subprocess模块的call函数。...比如: return_code = subprocess.call("echo Hello World", shell=True) os模块中还有C中那样的fork/exec/spawn函数,但是我不建议直接使用它们

    4.9K20

    Python多进程:如何在不依赖Queue的情况下传递结果

    随着数据的爆炸式增长,网络爬虫成为获取信息的强大工具。在爬取大量数据时,多进程技术可以显著提高效率。然而,如何在多进程中传递结果,而不依赖Queue,成为了一个值得探讨的问题。...本文将以采集抖音短视频为案例,详尽讲解如何在Python中实现这一目标。文章目录简介多进程与Queue的局限性替代方案:使用管道、共享内存和临时文件实战案例:采集抖音短视频结论1....简介在爬虫技术中,多进程可以显著提高数据采集效率。然而,传统的Queue在某些场景下存在局限性。本文将探讨如何在不依赖Queue的情况下,实现多进程间的数据传递。2....临时文件:将数据写入临时文件,由主进程读取。4. 实战案例:采集抖音短视频环境配置在开始之前,我们需要配置爬虫代理IP和设置useragent及cookie,以提高爬虫的成功率。本文使用爬虫代理服务。...结论通过本文的示例,我们展示了如何在Python中使用多进程技术,并在不依赖Queue的情况下传递结果。采用管道、共享内存或临时文件等替代方案,可以有效地解决Queue的局限性。

    25210

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

    可是这两个命令过于简单,不能完毕一些复杂的操作,如给执行的命令提供输入或者读取命令的输出,推断该命令的执行状态,管理多个命令的并行等等。...參数cwd用于设置子进程的当前文件夹。 參数env是字典类型,用于指定子进程的环境变量。假设env = None,子进程的环境变量将从父进程中继承。...Popen.communicate(input=None) 与子进程进行交互。向stdin发送数据,或从stdout和stderr中读取数据。可选參数input指定发送到子进程的參数。...subprocess.call(*popenargs, **kwargs) 执行命令。该函数将一直等待到子进程执行结束,并返回进程的returncode。文章一開始的样例就演示了call函数。...在异常对象中,包 括进程的returncode信息。 subprocess模块的内容就这么多。在Python手冊中,还介绍了怎样使用 subprocess来替换一些老的模块,老的函数的样例。

    2.4K20

    多进程并行计算

    问题背景我有了一个 Python 脚本,我想用它作为另一个 Python 脚本的控制器。我的服务器有 64 个处理器,所以我想要同时启动最多 64 个此第二个 Python 脚本的子进程。...在我的父控制器脚本中,我从列表中检索名称变量:my_list = [ ‘XYZ’, ‘ABC’, ‘NYU’ ]我的问题是,以子进程身份启动这些进程的最佳方法是什么?...我希望将子进程的数量限制在每次 64 个,因此需要跟踪状态(子进程是否已完成),以便能够有效地保持整个生成过程的运行。我研究过使用 subprocess 包,但拒绝了它,因为它一次只能生成一个子进程。...我最终找到了 multiprocessor 包,但我不得不承认被整个线程与子进程文档搞得不知所措。目前,我的脚本使用 subprocess.call 一次只生成一个子进程,如下所示:#!...解决方案您可以使用 multiprocessing 中的进程池类来实现多进程并行计算。

    22910

    Python 执行系统命令

    系统命令 作为胶水语言,Python可以很方便的执行系统命令,Python3中常用的执行操作系统命令有以下方式 os.system() os.popen() subprocess 模块 os.system...在一些复杂场景中,我们需要将一个进程的执行输出作为另一个进程的输入。在另一些场景中,我们需要先进入到某个输入环境,然后再执行一系列的指令等。...3、Popen.communicate(input=None):与子进程进行交互。向stdin发送数据,或从stdout和stderr中读取数据。可选参数input指定发送到子进程的参数。...7、Popen.stdin:如果在创建Popen对象是,参数stdin被设置为PIPE,Popen.stdin将返回一个文件对象用于策子进程发送指令。否则返回None。...12、subprocess.call(*popenargs, **kwargs):运行命令。该函数将一直等待到子进程运行结束,并返回进程的returncode。文章一开始的例子就演示了call函数。

    2.1K10

    Python模块学习:subprocess模块详解

    这个模块的目的在于替换几个旧的模块和方法,如:os.systemos.spawn*1.subprocess模块中的常用函数函数 描述subprocess.run()Python 3.5中新增的函数。...close_fds: 如果该参数的值为True,则除了0,1和2之外的所有文件描述符都将会在子进程执行之前被关闭。...startupinfo和creationflags: 这两个参数只在Windows下有效,它们将被传递给底层的CreateProcess()函数,用于设置子进程的一些属性,如主窗口的外观,进程优先级等。...Popen.communicate(input=None, timeout=None) 该方法可用来与进程进行交互,比如发送数据到stdin,从stdout和stderr读取数据,直到到达文件末尾。...关于communicate()方法的说明:该方法中的可选参数 input 应该是将被发送给子进程的数据,或者如没有数据发送给子进程,该参数应该是None。

    3.7K40

    python—subprocess、gl

    像Linux进程那样,一个进程可以fork一个子进程,并让这个子进程exec另外一个程序。在Python中,我们通过标准库中的subprocess包来fork一个子进程,并运行一个外部的程序。...subprocess包中定义有数个创建子进程的函数,这些函数分别以不同的方式创建子进程,所以我们可以根据需要来从中选取一个使用。...(pipe);如没有写stdin和stdout,默认将子进程执行结果打印至屏幕上,而不是保存于内存中 例1: #!...child2的输出文本也被存放在PIPE中,直到communicate()方法从PIPE中读取出PIPE中的文本;communicate()是Popen对象的一个方法,该方法会阻塞父进程,直到子进程完成...;child2.communicate()相当于child2.write()、child2.close()、child2.read()这个三个方法 二、glob模块 python下的shell通配符,用它可以查找符合特定规则的文件路径名

    1.7K20

    Python调用Ant构建时根据构建状态来决定命令行退出状态

    os.system()无法获得返回值和输出 os.popen()返回的是file read的对象,对其进行读取read()操作可以看到执行的输出。...在使用commands的相关函数执行Ant命令行时: 没有执行构建直接退出(退出状态为: 1,输出为: 不是内部或外部命令,也不是可运行的程序或批处理文件) 结论:可能是因为Ant...命令不是系统命令的缘故 于是查找资料又得知了subprocess的相关函数,如subprocess.call、subprocess.check_call、subprocess.check_output...subprocess.call (*popenargs , **kwargs )执行命令,并等待命令结束,再返回子进程的返回值 subprocess.check_call (*popenargs..., **kwargs )执行上面的call命令,并检查返回值,如果子进程返回非0,则会抛出CalledProcessError异常,这个异常会有个returncode 属性,记录子进程的返回值。

    1.2K20

    Python模块之subprocess

    一 简介 在使用Python 开发MySQL自动化相关的运维工具的时候,遇到一些有意思的问题,本文介绍Python的 subprocess 模块以及如何和MySQL交互具体操作,如启动 ,关闭 ,备份数据库...二 基础知识 Python2.4引入subprocess模块来管理子进程,可以像Linux 系统中执行shell命令那样fork一个子进程执行外部的命令,并且可以连接子进程的output/input...他们分别是 2.1 subprocess.call() 父进程等待子进程完成,并且返回子进程执行的结果 0/1 其实现方式 def call(*popenargs, **kwargs):...Popen.communicate(input=None) 与子进程进行交互。向stdin发送数据,或从stdout和stderr中读取数据。可选参数input指定发送到子进程的参数。...五 参考资料 [1] 官方文档 [2] Python中的subprocess与Pipe [3] python类库31[进程subprocess]

    2.2K10

    python调用shell命令小结

    在写python脚本的时候,经常需要调用系统命令,常用的python调用系统命令的方法主要有subprocess.call和os.popen。...默认情况下subprocess.call的方法结果是返回值,即1或0,而os.popen则是命令运行的结果,可以用readlines(读取所有行,返回数组)或者read(读读取所有行,返回str)来读取...subprocess类总主要的方法有: subprocess.call:开启子进程,开启子进程,运行命令,默认结果是返回值,不能try  subprocess.check_call:运行命令,默认结果是返回值...,不能try,可以获取命令结果 subprocess.PIPE 初始化stdin,stdout,stderr,表示与子进程通信的标准流 Popen.poll 检查子进程是否结束,并返回returncode...Popen.wait等待子进程是否结束,并返回retrurncode 比如check_call的sample: import subprocess import traceback cmd='hadoop

    1.5K20

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

    作为胶水语言,Python可以很方便的执行系统命令,Python3中常用的执行操作系统命令有os.system()、os.popen()、subprocess.popen()、subprocess.call...os.system() system函数可以将字符串转化成命令在服务器上运行;其原理是每一条system函数执行时,其会创建一个子进程在系统上执行命令行,子进程的执行结果无法影响主进程。...,这个函数的返回值是一个文件对象,可以读或者写(由mode决定,mode默认是’r’)。...如果mode为’r’,调用该对象的read()或readlines()方法可以读取输出内容。...官方推荐使用该模块执行系统命令,subprocess模块通过子进程来执行外部指令,并通过input/output/error管道,获取子进程的执行的返回信息。

    4.4K20

    前50个Python面试问题(最受欢迎)

    根据分配给变量的值,Python存储适当的数据类型。对于整数,浮点数等数字,数据长度是无限的。 #10)如何在Python中使用数组? 答: Python不支持数组。...答案:由于Python是解释器,因此它开始从源文件中读取代码并开始执行它们。...答:时间模块可用于计算应用程序不同阶段的时间,并使用日志记录模块以任何首选格式将数据记录到文件系统中。 #21)如何在Python应用程序的主流程中启动子流程?...答: Python有一个称为子进程的内置模块。您可以导入此模块,并使用run()或Popen()函数调用来启动子进程并获得其返回代码的控制权。...6s'%a) 答:输出应为:python #31)编写命令以读取: 一种。文件中的“ 10”个字符 b。读取整个文件 c。一起执行两个命令后写输出。

    6K30

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

    因为不是从当前进程中读取管道(pipe),如果子进程没有生成足够的输出来填充OS的管道缓冲区,可能会阻塞子进程。...因为不是从当前进程中读取管道(pipe),如果子进程没有生成足够的输出来填充OS的管道缓冲区,可能会阻塞子进程。...因为不是从当前进程中读取管道(pipe),如果子进程没有生成足够的输出来填充OS的管道缓冲区,可能会阻塞子进程。...如果进程在timeout(单位 秒)之后依然没终止,则抛出TimeoutExpired 异常,(Python3.3.2中发丝。捕获该异常并重试comunicate,不会丢失任何输出。...注意:如果设置了shell=True,则该属性值为衍生的shell进程的id Popen.returncode 子进程返回代码,如果值为None表明进程还没终止。

    4.6K20

    Python全栈开发之常用模块

    只能适用于Python的基本数据类型,跨语言 json.loads() 接收一个字符串,转换成Python数据类型 json.load() 从文化中读取字符串,转换成Python数据类型 json.dumps...转换成字符串 json.dump() 接收一个Python数据类型,转换成字符串,写入到文件中 No.7 pickle 适用于Python的所有数据类型,但是只针对Python pickle.loads...() 接收字节,转换成Python数据类型 pickle.load() 从文化中读取字节,转换成Python数据类型 pickle.dumps() 接收一个Python数据类型。...shell:同上 cwd:用于设置子进程的当前目录 env:用于指定子进程的环境变量。如果env = None,子进程的环境变量将从父进程中继承。...()函数,用于设置子进程的一些属性,如:主窗口的外观,进程的优先级等等 import subprocess """ 终端输入的命令分为两种: 输入即可得到输出,如:ifconfig 输入进行某环境,依赖再输入

    1.1K10
    领券