关于Python2.7的subprocess模块的用法, 我的几点总结, 对否?
黄舟
黄舟 2017-04-18 09:25:46
[Python讨论组]

描述问题

通读官方文档,做了几点总结:

  1. 建议使用subprocess

  2. 主要类是Popen, 貌似用的不多

  3. 主要函数有check, check_call, check_output

    • 命令+参数用list

    • shell=True管用, 此时命令用一个字符串

实际使用了,几点疑惑如下:

  1. 哪个函数常用, 貌似check开头的函数完成的功能差不多?

    • 需要命令行的返回值

    • 需要命令的输出值

    • stderr

  2. shell=True到底是好用还是不好用? 我个人倾向于使用它, 因为此时我可以利用系统的bash, 写一点较复杂的cmd. shell=False下需要使用一个列表, 一个一个列麻烦

  3. 我因为写BashShell后, 我觉得Shell这么语言太不喜欢了(但是我能写shell), 因此想结合Shell+Python做一些自动化的工作, Shell做外层薄薄的封装, Python完成底层核心的逻辑(若使用shell来完成我的逻辑, 选择go die), 哪里有这方面的经验汲取?

  4. 想阅读下使用subprocess的较为复杂的代码, 哪里看? (网上搜到的太简单了, 感觉帮助不大)

上下文环境-应用环境

Linux-Server_64bit
Bash
Python2.7
黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(1)
PHPz
  1. 是有细微差别的,check_all不会等子进程的,主进程退了就立马返回,check_output则会等

  2. shell=True有安全隐患,官方的例子很形象的说明问题:

    >>> from subprocess import call
    >>> filename = input("What file would you like to display?\n")
    What file would you like to display?
    non_existent; rm -rf / #
    >>> call("cat " + filename, shell=True) # Uh-oh. This will end badly...
  3. 如果是想做自动化部署运维之类的,建议直接用ansible或者salt

  4. subprocess本身就是个壳,复杂还是在bash本身。如果你想用python程序来做一些系统管理的事情,可以尽量用python自己的系统函数来做而不是调subprocess,这样控制更加精准

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号