如何在bash脚本中包含python脚本


13

我需要在bash脚本中包括以下python脚本。

如果bash脚本成功结束,则需要执行以下脚本:

#!/usr/bin/python    
from smtplib import SMTP
import datetime
debuglevel = 0

smtp = SMTP()
smtp.set_debuglevel(debuglevel)
smtp.connect('192.168.75.1', 25)
smtp.login('my_mail', 'mail_passwd')

from_addr = "My Name <my_mail@192.168.75.1>"
to_addr = "<my_mail@192.168.75.1"
subj = "Process completed"
date = datetime.datetime.now().strftime( "%d/%m/%Y %H:%M" )
#print (date)
message_text = "Hai..\n\nThe process completed."

msg = "From: %s\nTo: %s\nSubject: %s\nDate: %s\n\n%s" % ( from_addr, to_addr, subj, date, message_text )

smtp.sendmail(from_addr, to_addr, msg)
smtp.quit()

4
script.sh && python script.py
Costas

2
为什么要“包含”它?为什么不运行它呢?
terdon

1
从python调用bash脚本import os os.system ("./script.sh")
Costas 2015年

Answers:


8

如果要将bash和python脚本的源代码放在一起,可以使用heredoc。例如,说下面是一个名为的文件的内容pyinbash.sh

#!/bin/bash

echo "Executing a bash statement"
export bashvar=100

cat << EOF > pyscript.py
#!/usr/bin/python
import subprocess

print 'Hello python'
subprocess.call(["echo","$bashvar"])

EOF

chmod 755 pyscript.py

./pyscript.py

现在运行pyinbash.sh将产生:

$ chmod 755 pyinbash.sh
$ ./pyinbash.sh
Exe

根据OP对另一个答案的评论,我更新了答案,该内容负责处理python脚本中的bash变量。
mkc 2015年

1
我无法将变量的值从bash-script转换为python脚本。
Amal P Ramesh'3

我现在将subprocess.call([“ echo”,“ \ $ bashvar”])替换为subprocess.call([“ echo”,“ bashvar”])。
Amal P Ramesh'3

那太整齐了!
SexyBeast

17

只需将HereDoc传递给即可python -

从python帮助python -h

- : program read from stdin

#!/bin/bash

MYSTRING="Do something in bash"
echo $MYSTRING

python - << EOF
myPyString = "Do something on python"
print myPyString

EOF

echo "Back to bash"

我不明白为什么这被否决了。在某些情况下,这是一种简单可行的解决方案。它确实有(主要)限制,尽管您不能在python脚本中使用标准输入(因为它从heredoc接收标准输入)。
pyrocrasty

我讨厌无记名投票。这个对我有用。Upvoted它;-)
千电子伏

支持此答案,因为(与接受的答案不同)它没有将脚本写入文件系统。
Huw Walters

2

最简单的方法是例如仅将python脚本另存为,script.py然后从bash脚本调用它,或者在bash脚本之后调用它:

#!/usr/bin/env bash
echo "This is the bash script" &&
/path/to/script.py

要么

script.sh && script.py

在bash脚本执行时,已定义了一些变量,我需要在python脚本中用于消息正文。
Amal P Ramesh

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.