iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Shell脚本里调用Python程序
  • 670
分享到

Shell脚本里调用Python程序

脚本程序Shell 2023-01-31 02:01:46 670人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

脚本背景:主管要求看门狗程序不仅仅只是看门,还要在看门成功的时候发送邮件给各个开发人员,而且必须要用公司原有的python程序作为发送邮件的主程序,所以需要在原有的看门狗程序上加一句话,而这个看门狗程序恰恰是shell程序,两种不同程序混搭

脚本背景:主管要求看门狗程序不仅仅只是看门,还要在看门成功的时候发送邮件给各个开发人员,而且必须要用公司原有的python程序作为发送邮件的主程序,所以需要在原有的看门狗程序上加一句话,而这个看门狗程序恰恰是shell程序,两种不同程序混搭交织,还有变量的混搭交织,很是让人爱恨交织。


那个发送邮件的程序,程序名叫AutoMail.py,内容如下

from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication

mailto_list=["开发人员A@我的公司名.com","开发人员B@我的公司名.com","开发人员C@我的公司名.com"]
mail_host="mail.我的公司名.com"
mail_user="登陆发送邮箱的用户名"
mail_pass="这里是发送邮箱的密码"
mail_postfix="公司名.com"
mail_sender="用户名@我的公司.com"
def send_mail(sub, content):
    me=mail_sender    #为什么这里要设定一个me?写这个脚本的大哥图啥?
    msg = MIMEMultipart()
    msg['Subject'] = sub
    msg['From'] = me    #可以看得出,抄脚本这个大哥是从下往上抄的,me一看就是后补的,直接放mail_sender犯法?
    msg['To'] = ";".join(mailto_list)
    content1 = MIMEText(str(content), 'plain', 'utf-8')
    msg.attach(content1)
    try:
        s = smtplib.SMTP()
        s.connect(mail_host)
        s.login(mail_user,mail_pass)
        s.sendmail(me, mailto_list, msg.as_string())
        print('send sucess\n')
        s.close()
    except Exception as e: print(str(e))

看门狗程序全文就不写了,这个涉及到了公司机密。


现在的重点就是要在看门狗这个shell脚本里添加一句命令,这个命令要启动AutoMail.py这个脚本,同时还要传导出看门狗负责的模块名,这里又涉及到了在Python的启动命令里添加shell变量的“难点”(其实一点也不难)。


解决思路:Python的sys有一个属性叫sys.argv,这个属性可以拿到命令列里的参数。


举个例子吧,假设有一个脚本叫111.py,里面的内容如下:

wKiom1ey0vnTm6f-AAASK2EWWgU526.png-wh_50

当我启动这个脚本并在启动的同时传入参数的时候,输出是这样的:

wKiom1ey02SB1TWLAAAgqBgsSt4216.png


借用这个特性,就可以实现上面的要求了,我们可以把邮件的标题和正文当作两个参数随着启动AutoMail.py的语句一起执行,于是我把整个AutoMail.py的内容更改如下:

import sys
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication

mailto_list=["开发人员A@我的公司名.com","开发人员B@我的公司名.com","开发人员C@我的公司名.com"]
mail_host="mail.我的公司名.com"
mail_user="登陆发送邮箱的用户名"
mail_pass="这里是发送邮箱的密码"
mail_postfix="公司名.com"
mail_sender="用户名@我的公司.com"
def send_mail(sub, content):
    me=mail_sender
    msg = MIMEMultipart()
    msg['Subject'] = sub
    msg['From'] = me
    msg['To'] = ";".join(mailto_list)
    content1 = MIMEText(str(content), 'plain', 'utf-8')
    msg.attach(content1)
    try:
        s = smtplib.SMTP()
        s.connect(mail_host)
        s.login(mail_user,mail_pass)
        s.sendmail(me, mailto_list, msg.as_string())
        print('send sucess\n')
        s.close()
    except Exception as e: print(str(e))
    
if __name__=='__main__':
        send_mail(*sys.argv[1:])

增加了一头一尾,同时在看门狗程序里添加“python /AutoMail文件的绝对路径/AutoMail.py $name已经重启 "进程重启!"”这样一句话,其中name是一个变量,就是被“看门”的模块名,保存退出之后,kill掉一个模块,让看门狗重启模块实验一下,结果很满意,如图:

wKioL1ey1QvCsigMAAA8rO3JnhA448.png-wh_50

这里应该有人好奇了,明明是启动python程序,却在命令里添加了一个shell的变量,为什么python还是可以识别呢?因为虽然命令是启动python程序,但是命令本身是shell的语句啊,所以shell的语句当然可以识别shell的变量了~~~


--结束END--

本文标题: Shell脚本里调用Python程序

本文链接: https://www.lsjlt.com/news/186925.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Shell脚本里调用Python程序
    脚本背景:主管要求看门狗程序不仅仅只是看门,还要在看门成功的时候发送邮件给各个开发人员,而且必须要用公司原有的python程序作为发送邮件的主程序,所以需要在原有的看门狗程序上加一句话,而这个看门狗程序恰恰是shell程序,两种不同程序混搭...
    99+
    2023-01-31
    脚本 程序 Shell
  • shell中如何调用python脚本
    要在shell中调用Python脚本,可以使用以下命令:```python script.py```其中,`python`是Pyth...
    99+
    2023-10-10
    shell python
  • python调用bash shell脚本方法
    目录1. os.system()1.1. demo2. os.popen()2.1 demo3. commands模块4. subprocess4.1 demo1. os.syste...
    99+
    2022-11-12
  • java怎么远程调用shell脚本
    在Java中,可以使用`Runtime`类或`ProcessBuilder`类来远程调用shell脚本。1. 使用`Runtime`...
    99+
    2023-10-11
    java shell
  • Linux Shell脚本系列教程(七):脚本调试
    一、调试脚本 调试功能是每一种编程语言都应该实现的重要特性之一,当出现一些始料未及的情况时,用它来生成脚本的运行信息,调试信息可以帮你弄清楚是什么原因使得程序发生崩溃或者行为异常。 二、Bash内建调试功能...
    99+
    2022-06-04
    脚本 教程 系列
  • shell怎么调用perl脚本
    要在shell中调用Perl脚本,需要执行以下步骤:1. 确保已经安装了Perl解释器。可以在终端中输入perl -v来检查Perl...
    99+
    2023-10-21
    perl shell
  • java怎样调用shell脚本
    这篇文章主要介绍java怎样调用shell脚本,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、通过ProcessBuilder进行调度这种方法比较直观,而且参数的设置也比较方便。ProcessBuilder&nbs...
    99+
    2023-06-15
  • JAVA如何调用Shell脚本
    在实际项目中,Java有时候需要调用C写出来的东西,除了JNI以外,我认为一种比较好的方法是JAVA调用Shell。先把C写出来的make成可执行文件,然后再写一个shell脚本执行该可执行文件,最后是JAVA调用该shell脚本。JAVA...
    99+
    2023-05-31
    java shell脚本 ava
  • node.js调用脚本(python/shell)和系统命令
    每种语言都有自己的优势,互相结合起来各取所长程序执行起来效率更高或者说哪种实现方式较简单就用哪个,nodejs是利用子进程来调用系统命令或者文件,文档见http://nodejs.o...
    99+
    2022-11-13
  • C语言中程序如何调用Python脚本
    目录一、环境配置0x00 平台0x01 添加 包含目录 和 库目录0x02 添加依赖项二、案例三、常用API有时候在写C语言程序的时候又想利用一下pyt...
    99+
    2022-11-12
  • Shell脚本中调用另一个Shell脚本的示例分析
    小编给大家分享一下Shell脚本中调用另一个Shell脚本的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!主要以下有几种方式:CommandExplana...
    99+
    2023-06-09
  • 如何在Shell脚本中调用另一个脚本
    如何在Shell脚本中调用另一个脚本?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。假如有脚本 first.sh:#!/bin/bash#------------------...
    99+
    2023-06-09
  • 怎么在Shell脚本中调用另一个脚本
    这期内容当中小编将会给大家带来有关怎么在Shell脚本中调用另一个脚本,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。forkfork 是最普通的, 就是直接在脚本里面用 path/to/foo.sh 来调...
    99+
    2023-06-09
  • python调用bash shell脚本的方法是什么
    本篇文章为大家展示了python调用bash shell脚本的方法是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1. os.system()help(os.system)1.1. d...
    99+
    2023-06-22
  • 详解Shell脚本中调用另一个Shell脚本的三种方式
    主要以下有几种方式: Command Explanation fork 新开一个子 Shell 执行,子 Shell ...
    99+
    2022-06-04
    Shell调用Shell脚本 调用Shell脚本
  • Shell脚本调用另一个脚本的三种方法
    假如有脚本 first.sh: #!/bin/bash #------------------ #@file:first.sh #------------------ echo 'your are in first ...
    99+
    2022-06-04
    shell 脚本 shell 脚本调用 shell 脚本调用其他脚本
  • java中调用shell脚本的方法
    java中调用shell脚本的方法:1、在java项目中能够通过ProcessBuilder进行调度shell脚本,参数设置相对简单;2、还能够通过系统Runtime执行shell脚本,但在参数设置上需要添加空格将两个参数分开。具体内容如下...
    99+
    2022-10-14
  • Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例
    每种语言都有自己的优势,互相结合起来各取所长程序执行起来效率更高或者说哪种实现方式较简单就用哪个,nodejs是利用子进程来调用系统命令或者文件,文档见http://nodejs.org/api/child...
    99+
    2022-06-04
    脚本 实例 命令
  • java如何调用远程服务器的shell脚本
    这篇文章给大家分享的是有关java如何调用远程服务器的shell脚本的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。最近接了个需求,要求远程调shell脚本,你没听错!!!需求就一句话,咱是谁,咱是优秀的开发选手。...
    99+
    2023-06-14
  • 如何利用shell脚本优化ASP应用程序?
    ASP(Active Server Pages)是一种基于服务器端的网页应用程序框架,它可以通过脚本语言(如VBScript、JScript等)来生成动态的网页内容。虽然ASP的开发效率很高,但在高负载情况下,ASP应用程序的性能往往无法...
    99+
    2023-07-27
    缓存 shell 异步编程
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作