博客
关于我
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/

你可能感兴趣的文章
PyQt MimeData 文件名
查看>>
PyQt QML Material Design 按钮背景不会改变
查看>>
PyQt QString转成python stirng
查看>>
PyQt QToolButton在焦点时不更新图标
查看>>
PyQt 正确使用 emit() 和 pyqtSignal()
查看>>
PyQT-将文件复制到剪贴板
查看>>
PYQT.如何在QTableView中插入小部件
查看>>
PyQt4 代码在 PyQt5 (QHeaderView) 上不起作用
查看>>
PyQt4 到 PyQt5 ->mainFrame() 已弃用,需要修复才能加载网页
查看>>
PyQt4, class:mouseButtons用法
查看>>
PyQt4参考文档
查看>>
PyTorch Lightning:通过分布式训练扩展深度学习工作流
查看>>
PyQt5 - QThread:在线程仍在运行时被销毁
查看>>
PyQt5 - 如何从工作线程发出信号以通过 GUI 线程调用事件
查看>>
PyQt5 Designer 不工作:此应用程序无法启动,因为无法初始化 Qt 平台插件
查看>>
PyQt5 QLCNumber 没有更新
查看>>
PyQt5 TabWidget选项卡BarClicked TypeError:本机Qt信号不可调用
查看>>
PyQt5 从 PyQt4 转换信号代码
查看>>
PyQt5 和 asyncio:从永不完成的收益
查看>>
PyQt5 和 Django:如何使用 HTTP 请求(Multipart-form)上传图像?
查看>>