[工具] Python 一个脚本调用另一个脚本的函数执行 Linux 命令并返回执行结果

介绍:

使用方法:
1. 将第一个脚本命名为 test_main.py,将第二个脚本命名为 test_sub.py,并将它们放在同一个2. 目录下
3. 给此脚本添加执行权限
4. 用 python3 命令执行第一个脚本

注意:执行此脚本之前要先安装 ansible 命令,并可以让 ansible 命令控制名为 test 的服务器

第一个脚本:

from cpu_sub import *

sename='test'

out1=cpu(sename)
out1=out1.decode().strip()

print(out1)

out2=mem(sename)
out2=out2.decode().strip()

print(out2)

out3=time(sename)
out3=out3.decode().strip()

print(out3)

第二个脚本:

import subprocess

def cpu(sname):
    out = subprocess.check_output('ansible -m shell -a \'cat /proc/cpuinfo | egrep "core id|physical id" | tr -d "\n" | sed s/physical/\\nphysical/g | grep -v ^$ | sort | uniq | wc -l\' %s | tail -1'%sname, shell=True)
    return(out)

def mem(sname):
    out = subprocess.check_output('ansible -m shell -a \'free -m\' %s | grep -i mem'%sname, shell=True)
    return(out)

def time(sname):
    out = subprocess.check_output('ansible -m shell -a \'uptime\' %s | tail -1'%sname, shell=True)
    return(out)

[工具] Shell 显示所有可升级的软件版本,并自动生成相应的升级命令 (openSUSE & SLE)

介绍:

作者:朱明宇
名称:openSUSE & SLE 显示所有可升级的软件版本,并自动生成相应的升级命令
作用:openSUSE & SLE 显示所有可升级的软件版本,并自动生成相应的升级命令

使用方法:
给此脚本添加执行权限
执行此脚本
执行此脚本大致会生成以下内容:

zypper update  MozillaFirefox-78.12.0-lp152.2.61.1 MozillaFirefox-translations-common-78.12.0-lp152.2.61.1 alsa-oss-1.1.8-lp152.4.3.1

脚本:

#!/bin/bash

m=''

for n in `zypper list-updates | tail -n +5 | awk '{print $7"-"$11}'`
do
        m="$m $n"
done

echo "zypper update $m"

[工具] Python 一个脚本调用另一个脚本的函数

介绍:

使用方法:
1. 将第一个脚本命名为 test_main.py,将第二个脚本命名为 test_sub.py,并将它们放在同一个目录下
2. 给此脚本添加执行权限
3. 用 python3 命令执行第一个脚本

第一个脚本:

from test_sub import * 

a=2
b=3

out=nsum(a,b)

print(out)

第二个脚本:

def nsum(x,y):
    out = x + y
    return(out)

[工具] Python 一个脚本调用另一个脚本

介绍:

使用方法:
1. 将第一个脚本命名为 test_main.py,将第二个脚本命名为 test_sub.py,并将它们放在同一个目录下
2. 给两个脚本添加执行权限
3. 用 python3 命令执行第一个脚本

第一个脚本:

import subprocess

test=subprocess.Popen(['python3', './test_sub.py'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

out=test.decode().strip()

print(out)

第二个脚本:

def sum(a,b):
    return(a + b)

c = 4
b = 2

print(sum(c,b))

[实验] Django 实现数据原子性

注意:

本实验是接着 《Django 自定义逻辑添加(通过自定义 save 对象实现)(一次性完成多对多表数据的插入)》而继续的

正文:

将 mysite/user/models.py 中的以下内容:

class Clazz(models.Model):
    cname = models.CharField(max_length=30)

class Student(models.Model):
    sname = models.CharField(max_length=30)
    score = models.PositiveBigIntegerField()
    cls = models.ForeignKey(Clazz,on_delete=models.CASCADE)

    def __str__(self):
        return u'Student:%s,%s'%(self.sname,self.score)

    def  save(self, force_insert=False, force_update=False, using=None, update_fields=None):
        try:
            self.cls = Clazz.objects.get(cname=self.cls.cname)
        except Clazz.DoesNotExist:
            self.cls = Clazz.objects.create(cname=self.cls.cname)

        #Insertion of student table
        models.Model.save(self, force_insert=False, force_update=False,using=None, update_fields=None)

修改为:

class Clazz(models.Model):
    cname = models.CharField(max_length=30)

class Student(models.Model):
    sname = models.CharField(max_length=30)
    score = models.PositiveBigIntegerField()
    cls = models.ForeignKey(Clazz,on_delete=models.CASCADE)

    def __str__(self):
        return u'Student:%s,%s'%(self.sname,self.score)

    from django.db.transaction import atomic
    @atomic
    def  save(self, force_insert=False, force_update=False, using=None, update_fields=None):
        try:
            self.cls = Clazz.objects.get(cname=self.cls.cname)
        except Clazz.DoesNotExist:
            self.cls = Clazz.objects.create(cname=self.cls.cname)

        #Insertion of student table
        models.Model.save(self, force_insert=False, force_update=False,using=None, update_fields=None)