【python零基础入门学习】python基础篇之系统模块调用shell命令执行(四)

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

用于执行一些shell操作

import shutil
import os
f1 = open('/etc/hosts', 'rb')
f2 = open('/tmp/zj.txt', 'wb')
shutil.copyfileobj(f1 , f2)
f1.close()
f2.close()

#拷贝文件,cp /etc/hosts /tmp/zhuji
shutil.copy('/etc/hosts','/tmp/yff')
shutil.copy('/etc/hosts','/tmp/yff.txt')

#cp -p /etc/hosts /tmp/zhuji
shutil.copy2('/etc/hosts','/tmp/yff2')

#cp -r /etc/security /tmp/anquan
shutil.copytree('/etc/security','/tmp/anquan')

#mv /tmp/anquan /var/tmp/
shutil.move('/tmp/anquan','/var/tmp')

#chown bob.bob /tmp/yyf
shutil.chown('/tmp/yff.txt',user='yyf',group='yyf')
shutil.chown('/tmp/yff',user='yyf',group='yyf')
shutil.chown('/tmp/yff2',user='yyf',group='yyf')

#rm -rf /var/tmp/anquan ---只能删除目录
shutil.rmtree('/var/tmp/anquan')
#rm -rf /tmp/yyf ----删除文件
os.remove('/tmp/yff2')


subprocess模块:

用于调用系统命令

>>> import subprocess
>>> result = subprocess.run('id root', shell=True)
uid=0(root) gid=0(root) 组=0(root)

>>> result = subprocess.run('id root ; id yyf', shell=True)
uid=0(root) gid=0(root) 组=0(root)
uid=1003(yyf) gid=1003(yyf) 组=1003(yyf)

>>> result = subprocess.run('id root ; id ddd', shell=True)
uid=0(root) gid=0(root) 组=0(root)
id: ddd: no such user

>>> result.args
'id root ; id ddd'

>>> result.returncode -----相当于 shell 的$?
1

#如果不希望把命令的执行结果打印在屏幕上,可以使用以下方式:
>>> import subprocess
>>> result = subprocess.run('id root; id sss', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
>>> result.stderr
b'id: sss: no such user\n'
>>> result.stdout
b'uid=0(root) gid=0(root) \xe7\xbb\x84=0(root)\n'
>>> result.stdout.decode()
'uid=0(root) gid=0(root) 组=0(root)\n'
>>>

py:
import subprocess
result = subprocess.run('id root ; id fff ', shell=True, stdout=subprocess.PIPE,stderr=subprocess.PIPE)
print(result.stderr)
print(result.stdout)
print(result.stdout.decode())

测试结果:
b'id: fff: no such user\n'
b'uid=0(root) gid=0(root) \xe7\xbb\x84=0(root)\n'
uid=0(root) gid=0(root) 组=0(root)

ping脚本:

import sys
import subprocess

def ping(host):
    result = subprocess.run(
        'ping -c2 %s &> /dev/null' % host , shell=True
    )
    if result.returncode == 0 :
        print('%s:up' % host)
    else:
        print('%s:down' % host)

if __name__ == '__main__':
    ping(sys.argv[1])

编程常用语法风格以及习惯:

语法风格:

链示多重赋值:
>>> a=b=[10,20]
>>> b.append(40)
>>> a
[10, 20, 40]
>>> b
[10, 20, 40]
多元变量赋值:
>>> a,b = 10 ,20
>>> a
10
>>> b
20
>>> c, d = (10,20)
>>> c
10
>>> d
20
>>> e, f = [10, 20 ]
>>> e
10
>>> b
20
>>> a = [100]
>>> a
[100]
>>> g, f = 'ab'
>>> g
'a'
>>> f
'b'

两个变量互换

>>> t = a
>>> a = b
>>> b = t
>>> a
20
>>> b
[100]
>>> a , b = b ,a 
>>> a
[100]
>>> b
20


合法标识符:

>>> import keyword
>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
>>> 'pass' in keyword.kwlist
True
>>> keyword.iskeyword('is')
True


內建:

內建不是关键字,可以被覆盖,除非你不用它

len = 100

len(‘abc’)  -----无法使用原来的功能

模块文件布局:

```python
#!/usr/local/bin/python3         # 解释器
"""模块文件名

模块文件的说明文字,即文档字符串,用于help帮助
"""
import sys                       # 模块导入
from random import randint, choice


hi = 'Hello World'               # 全局变量
debug = True


class MyClass:                   # 类的定义
    pass


def func1():                     # 函数定义
    pass


if __name__ == '__main__':       # 主程序代码
    func1()

#!/usr/local/bin/python3      —解释器
“”"演示模块

辣鸡
“”"
hi = ‘hello shabichao’  # 全局变量之后才可以调用

def pstar(n=30):
    “用于打印n个星号”
    print(‘*’ * n)

if name == ‘main’:
    print(hi)
    pstar()
    pstar(50)

import star
help(star)
Help on module star:
NAME
    star - 演示模块
DESCRIPTION
    辣鸡
FUNCTIONS
    pstar(n=30)
        用于打印n个星号
DATA
    hi = ‘hello shabichao’
FILE
    /root/nsd1907/py01/day03/star.py


#### 判断文件是否存在:



import os
os.path.ex
os.path.exists(      os.path.expanduser(  os.path.expandvars(  os.path.extsep     
os.path.ex
os.path.exists(      os.path.expanduser(  os.path.expandvars(  os.path.extsep     
os.path.exists(‘/tmp/yff’)
True
os.path.exists(‘/tmp/yffdd’)
False


#### 编程思路:



  1. 发呆。思考程序的动作方式(交互?非交互?)
文件名: /
文件已存在,请重试。
文件名: /etc/hosts
文件已存在,请重试。
文件名: /tmp/abc.txt
请输入文件内容,在单独的一行输入end结束。
(end to quit)> hello world!
(end to quit)> how are you?
(end to quit)> the end
(end to quit)> end
# cat /tmp/abc.txt
hello world!
how are you?
the end
  1. 分析程序有哪些功能,把这些功能编写成函数
def get_fname():
    '用于获取文件名'
def get_content():
    '用于获取内容'
def wfile(fname, content):
    '用于将内容content,写入文件fname'
  1. 编写程序的主体,按一定的准则调用函数
def get_fname():
    '用于获取文件名'
def get_content():
    '用于获取内容'
def wfile(fname, content):
    '用于将内容content,写入文件fname'
if __name__ == '__main__':
    fname = get_fname()
    content = get_content()
    wfile(fname, content)
  1. 完成每一个具体的函数

#####  实例:



“”"创建文件

这是一个用于创建文件的脚本,用到的有三个函数
“”"
import os

def get_fname():
    ‘用于获取文件名’
    while 1 :
        fname =  input('文件名: ')
        if not os.path.exists(fname):
            break
        print('文件已存在,请重新输入: ')
    return fname

def get_content():
    ‘用于获取内容’
    content = []

print(‘请输入文件内容,在单独的一行输入end结束’)
    while 1:
        line = input('(end to quit)> ')
        if line == ‘end’:
            break
        #content.append(line + ‘\n’)
        content.append(line)
    return content

# print(‘请输入文件内容,在单独的一行输入end结束’)
    # f = open(fname,‘w’)
    # while if q != end :
    # content = f.writelines([q = input('(end to quit)>: ')])

def wfile(fname,content):
    ‘用于将内容content,写入文件fname’
    with open(fname, ‘w’) as fobj:
        fobj.writelines(content)
    # fobj = open(fname,‘w’)
    # fobj.writelines(content)
    # fobj.close()

if name == ‘main’:
    fname = get_fname()
    content = get_content()
    print(content)
    content = [‘%s\n’ % line for line in content]
    wfile(fname, content)


##  序列对象:


包括字符串 列表 元组


![](https://img-blog.csdnimg.cn/18cf06a769b64fb3b03d30bcf6a779b2.png)



#list用于将某些数据转成列表

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

/18cf06a769b64fb3b03d30bcf6a779b2.png)

#list用于将某些数据转成列表  


[外链图片转存中...(img-NyifFG4D-1715289087819)]
[外链图片转存中...(img-iXRP3J8D-1715289087820)]
[外链图片转存中...(img-rjBuAoCr-1715289087820)]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值