Pythonスクリプトをbashスクリプト内に含める方法


13

以下のPythonスクリプトをbashスクリプト内に含める必要があります。

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
コスタ

2
なぜ「含める」のですか?なぜそれを実行しないのですか?
terdon

1
Pythonからbash-scriptを呼び出すimport os os.system ("./script.sh")
Costas

回答:


8

bashスクリプトとpythonスクリプトの両方のソースを一緒に保持したい場合は、ヒアドキュメントを使用できます。たとえば、次のようなファイルのコンテンツがあるとします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 2015年

subprocess.call(["echo"、 "\ $ bashvar"])をsubprocess.call(["echo"、 "bashvar"])に置き換えると、機能するようになりました。
Amal P Ramesh 2015年

それはかなりすてきでした!
SexyBeast 2016年

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スクリプトで標準入力を使用できないという(大きな)制限があります(ヒアドキュメントからstdinを受け取っているため)。
火砕物

コメントなしで反対投票は嫌いです。わたしにはできる。賛成投票;-)
kev 2018年

(受け入れられた回答とは異なり)スクリプトがファイルシステムに書き込まれないため、この回答に賛成しました。
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 2015

0

例としてこれはどうですか:

PYTHON_BIN=/usr/bin/python
if [ -x $PYTHON_BIN ]; then
$PYTHON_BIN -c "print 'Hello, world'"
else
echo 'Hello, world'
fi

VS

$ ./foobar.py
env: python: No such file or directory

2
答えを出すとき、なぜあなたの答えがそうであるのかについていくつかの説明をすることが望ましいです。
スティーブンラウフ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.