python和shell的结合与应用
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,函数模块system()其中最后一个0是这个命令的返回值,为0表示命令执行成功。使用system无法将执行的结果保存起来。例子:>>> import os>>> os.system
千家信息网最后更新 2026年11月02日python和shell的结合与应用
函数模块
system()
- 其中最后一个0是这个命令的返回值,为0表示命令执行成功。使用system无法将执行的结果保存起来。
例子:>>> import os>>> os.system('ls')blog.tar djangoblog.log managerblog.sh test.txtdata ENV nginx-1.15.11 wget-log0popen()
提示:python3已结废弃
例子:>>> import os>>> os.popen('ls')>>> os.popen('ls').read()'blog.tar\ndata\ndb.sql\ndead.letter\nDjangoBlog\ndjangoblog.log\nENV\nfile1\nget-pip.py\nindex.html\nmanagerblog.sh\nnginx-1.15.11\nPython-3.5.2\nstartDjangoBlog.sh\nstart_uwsgi.ini\ntest.txt\nwget-log\nzrlog-2.1.3-b5f0d63-release.war?attname=ROOT.war\n'>>> os.popen('ls').read().split('\n')['blog.tar', 'data', 'db.sql', 'dead.letter', 'DjangoBlog', 'djangoblog.log', 'ENV', 'file1', 'get-pip.py', 'index.html', 'managerblog.sh', 'nginx-1.15.11', 'Python-3.5.2', 'startDjangoBlog.sh', 'start_uwsgi.ini', 'test.txt', 'wget-log', 'zrlog-2.1.3-b5f0d63-release.war?attname=ROOT.war', ''] 获取命令执行的结果,但是没有命令的执行状态,这样可以将获取的结果保存起来放到list中。
subprocess
- 可以很方便的取得命令的输出(包括标准和错误输出)和执行状态位。
- commands.getoutput('ls')这个方法只返回执行结果result不返回状态。
提示:subprocess模块已经取代了commands
例子:
1、getstatusoutput>>> import subprocess>>> status,result=subprocess.getstatusoutput('ls')>>> status0>>> result'blog.tar\ndata\ndb.sql\ndead.letter\nDjangoBlog\ndjangoblog.log\nENV\nfile1\nget-pip.py\nindex.html\nmanagerblog.sh\nnginx-1.15.11\nPython-3.5.2\nstartDjangoBlog.sh\nstart_uwsgi.ini\ntest.txt\nwget-log\nzrlog-2.1.3-b5f0d63-release.war?attname=ROOT.war'>>> result.split('\n')['blog.tar', 'data', 'db.sql', 'dead.letter', 'DjangoBlog', 'djangoblog.log', 'ENV', 'file1', 'get-pip.py', 'index.html', 'managerblog.sh', 'nginx-1.15.11', 'Python-3.5.2', 'startDjangoBlog.sh', 'start_uwsgi.ini', 'test.txt', 'wget-log', 'zrlog-2.1.3-b5f0d63-release.war?attname=ROOT.war']2、getoutput
>>> print(subprocess.getoutput('ls').split('\n') )['blog.tar', 'data', 'db.sql', 'dead.letter', 'DjangoBlog', 'djangoblog.log', 'ENV', 'file1', 'get-pip.py', 'index.html', 'managerblog.sh', 'nginx-1.15.11', 'Python-3.5.2', 'startDjangoBlog.sh', 'start_uwsgi.ini', 'test.txt', 'wget-log', 'zrlog-2.1.3-b5f0d63-release.war?attname=ROOT.war']3、call
执行命令,返回状态码(命令正常执行返回0,报错则返回1)>>> subprocess.call('ls')blog.tar djangoblog.log managerblog.sh test.txtdata ENV nginx-1.15.11 wget-logdb.sql file1 Python-3.5.2 zrlog-2.1.3-b5f0d63-release.war?attname=ROOT.wardead.letter get-pip.py startDjangoBlog.shDjangoBlog index.html start_uwsgi.ini0
4、check_call
执行命令,如果执行成功则返回状态码0,否则抛异常
>>> subprocess.check_call('ls')blog.tar djangoblog.log managerblog.sh test.txtdata ENV nginx-1.15.11 wget-logdb.sql file1 Python-3.5.2 zrlog-2.1.3-b5f0d63-release.war?attname=ROOT.wardead.letter get-pip.py startDjangoBlog.shDjangoBlog index.html start_uwsgi.ini0>>> subprocess.check_call('ls luojun')Traceback (most recent call last): File "", line 1, in File "/usr/local/python3/lib/python3.5/subprocess.py", line 576, in check_call retcode = call(*popenargs, **kwargs) File "/usr/local/python3/lib/python3.5/subprocess.py", line 557, in call with Popen(*popenargs, **kwargs) as p: File "/usr/local/python3/lib/python3.5/subprocess.py", line 947, in __init__ restore_signals, start_new_session) File "/usr/local/python3/lib/python3.5/subprocess.py", line 1551, in _execute_child raise child_exception_type(errno_num, err_msg)FileNotFoundError: [Errno 2] No such file or directory: 'ls luojun' 5、check_output
执行命令,如果执行成功则返回执行结果,否则抛异常
>>> subprocess.check_output('ls')b'blog.tar\ndata\ndb.sql\ndead.letter\nDjangoBlog\ndjangoblog.log\nENV\nfile1\nget-pip.py\nindex.html\nmanagerblog.sh\nnginx-1.15.11\nPython-3.5.2\nstartDjangoBlog.sh\nstart_uwsgi.ini\ntest.txt\nwget-log\nzrlog-2.1.3-b5f0d63-release.war?attname=ROOT.war\n'>>> subprocess.check_output('ls luojun')Traceback (most recent call last): File "", line 1, in File "/usr/local/python3/lib/python3.5/subprocess.py", line 626, in check_output **kwargs).stdout File "/usr/local/python3/lib/python3.5/subprocess.py", line 693, in run with Popen(*popenargs, **kwargs) as process: File "/usr/local/python3/lib/python3.5/subprocess.py", line 947, in __init__ restore_signals, start_new_session) File "/usr/local/python3/lib/python3.5/subprocess.py", line 1551, in _execute_child raise child_exception_type(errno_num, err_msg)FileNotFoundError: [Errno 2] No such file or directory: 'ls luojun' 6、subprocess.Popen(…)
用于执行复杂的系统命令
参数 注释
args shell命令,可以是字符串或者序列类型(如:list,元组)bufsize 指定缓冲。0 无缓冲,1 行缓冲,其他 缓冲区大小,负值 系统缓冲stdin, stdout, stderr 分别表示程序的标准输入、输出、错误句柄preexec_fn 只在Unix平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用close_sfs 在windows平台下,如果close_fds被设置为True,则新创建的子进程将不会继承父进程的输入、输出、错误管道。所以不能将close_fds设置为True同时重定向子进程的标准输入、输出与错误(stdin, stdout, stderr)。shell 同上cwd 用于设置子进程的当前目录env 用于指定子进程的环境变量。如果env = None,子进程的环境变量将从父进程中继承。universal_newlines 不同系统的换行符不同,True -> 同意使用 \nstartupinfo 只在windows下有效,将被传递给底层的CreateProcess()函数,用于设置子进程的一些属性,如:主窗口的外观,进程的优先级等等createionflags 同上在python中调用shell脚本
- 编写一个脚本,传入两个参数
[root@VM_0_2_centos test]# vim test.sh[root@VM_0_2_centos test]# cat test.sh#!/bin/bashecho "this is my test shell ${1} ${2}"exit 0[root@VM_0_2_centos test]# chmod +x test.sh[root@VM_0_2_centos test]# /test/test.sh jluo jluocc.cnthis is my test shell jluo jluocc.cn - 在python脚本中调用shell脚本,并传入参数,注意参数前后要有空格
[root@VM_0_2_centos test]# vim mytest.py[root@VM_0_2_centos test]# cat mytest.py #! /usr/bin/env python3import osimport sysif(len(sys.argv)<3): print("please input two arguments") sys.exit(1)arg0 = sys.argv[1]arg1 = sys.argv[2]print('=====file name *.py全路径=====')print(sys.argv[0])print('=====脚本执行结果如下=====')os.system('/test/test.sh '+arg0+' '+arg1)[root@VM_0_2_centos test]# python3 mytest.py jluo jluocc.cn=====file name *.py全路径=====mytest.py=====脚本执行结果如下=====this is my test shell jluo jluocc.cn[root@VM_0_2_centos test]# python3 /test/mytest.py jluo jluocc.cn=====file name *.py全路径=====/test/mytest.py=====脚本执行结果如下=====this is my test shell jluo jluocc.cn结束语:
更多精彩内容持续更新中,关注微信公众号,有你更精彩。
命令
进程
结果
脚本
状态
缓冲
输出
参数
错误
成功
例子
标准
系统
路径
输入
不同
有效
精彩
函数
变量
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
小米移动互联网科技园
互联网通讯科技
互联网科技卖菜
互联网科技资迅
互联网科技公司怎么样
上海致骋互联网科技
沃里互联网科技
苏州大垚互联网科技
天扬科技互联网广告
哈尔滨新华互联网科技
互联网巨头投资的硬核科技
银川新华互联网科技学校地址
昊天互联网科技有限公司
电子科技大学互联网创业大赛
中科明德北京互联网科技
互联网方面的科技前沿
杭州披云加互联网科技有限公司
互联网科技资金流入
唯美互联网科技
上海互联网科技园景观
互联网科技园
深圳市人人互联网科技有限公司
互联网科技活动banner
科技互联网政务服务
华服互联网科技官网
互联网新科技动漫ppt素材
山东星卡互联网科技有限公司官网
电子商务与互联网科技的关系
有人说阿里系是互联网科技企业
马化腾互联网科技教学