博客
关于我
Python - 如何使用管道执行shell命令,但没有‘shell = True‘?
阅读量:799 次
发布时间:2023-03-05

本文共 962 字,大约阅读时间需要 3 分钟。

在Python中,如果你想执行shell命令却不想设置shell=True,可以使用subprocess模块。通过将命令放入一个列表中,你可以实现这一点。

比如,以下代码可以执行ls -l命令:

import subprocesscommand = ['ls', '-l']with subprocess.Popen(command, stdout=subprocess.PIPE) as process:    output, error = process.communicate()print('Output:', output.decode())

这里,subprocess.Popen创建了一个新的进程,执行指定的命令。stdout=subprocess.PIPE表示将标准输出捕获到output变量中。communicate()方法会等待子进程完成,并返回输出结果。

如果你也需要捕获错误输出,可以这样做:

import subprocesscommand = ['ls', '-l']with subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE) as process:    output, error = process.communicate()print('Output:', output.decode())if error:    print('Error:', error.decode())

此外,你可以设置环境变量:

import subprocesscommand = ['ls', '-l']env = {'PATH': '/usr/local/bin:$PATH'}with subprocess.Popen(command, stdout=subprocess.PIPE, env=env) as process:    output, error = process.communicate()print('Output:', output.decode())

记得处理输出时要注意编码问题,使用decode()方法将字节转换为字符串。如果你需要处理多个命令,可以将它们放入同一个列表中。

转载地址:http://eiafk.baihongyu.com/

你可能感兴趣的文章
Python - 如何使用管道执行shell命令,但没有‘shell = True‘?
查看>>
Python - 如何使这个不可腌制的对象可腌制?
查看>>
Python - 如何在 Windows 10 上完全卸载 Anaconda?
查看>>
python - 如何并行化python numpy中的总和计算?
查看>>
Python - 如何解析 xml 响应并将元素值存储在变量中?
查看>>
Python - 安装了扩展的远程 Webdriver
查看>>
python - 将字符串中的日期与今天的日期进行比较
查看>>
python - 数据描述符(class 内置 get/set/delete方法 )
查看>>
Python - 根据值绘制彩色网格
查看>>
Python - 正则表达式在括号之间获取数字
查看>>
Python - 正则表达式在括号之间获取数字
查看>>
Python - 正则表达式在括号之间获取数字
查看>>
Python - 类 __hash__ 方法和集合
查看>>
Python - 轻松将文本文件内容转换为字典值/键
查看>>
Python - 递归和列表
查看>>
python -- 小数据池 is和 == 再谈编码
查看>>
Python -- 算法实现
查看>>
python --- 元组(tuple)
查看>>
python --- 列表(list)
查看>>
python --- 协程
查看>>