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

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

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 <[email protected]>"
to_addr = "<[email protected]"
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()

答え1

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"

答え2

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
Executing a bash statement
Hello python
100

答え3

他のいくつかの答えとPython 3.11.1のドキュメントに記載されているように(説明されていません) コマンドラインと環境、次のように使用できます。-c command

-c command

    Pythonコードの実行command。  command通常のモジュールコードのように、かなりの先行スペースを持つ改行文字で区切られた1つ以上の文です。

つまり、Pythonスクリプト全体をBash文字列に入れることができます。以下は、コマンド置換を使用し、ここに文書化されたやや複雑で複雑なアプローチです。

#!/bin/bash
python3 -c "$(cat << EOF

a = input('?>')
print('you typed', a)
print('\033[1;32mbye...\033[m')

EOF
)"            

これはうまくいきます。 (コマンド  $()の置き換え)内部コマンド(この場合cat)の出力をPythonに引数として渡します。パイプがないため、Pythonコードで標準入力を使用できます。

この簡単なアプローチ(Pythonスクリプトの作成 言葉文字列)も動作します:

#!/bin/bash

python3 -c "
a = input('?>') 
print('you typed', a)
print('\033[1;32mbye...\033[m')"

これは、Bashで二重引用符で囲まれた文字列に関する一般的な問題を表します。つまり、シェルメタ文字、およびエスケープする必要  "$あります。たとえば、Pythonコードでそれを使用する必要がある場合は、次のようにエスケープする必要があります。`\"

#!/bin/bash

python3 -c "
a = input('?>') 
print(\"you typed\", a)
print(\"\033[1;32mbye...\033[m\")"

しかし、Pythonコードのすべての一重引用符を二重引用符に変更し、Pythonスクリプト全体を一重引用符で囲むとどうなりますか?

#!/bin/bash

python3 -c '
a = input("?>")
print("you typed", a)
print("\033[1;32mbye...\033[m")'

同様に、

$ python3 -c "print('An odd string:', '$((6*7))')"
An odd string: 42

$ python3 -c 'print("An odd string:", "$((6*7))")'
An odd string: $((6*7))

答え4

最も簡単な方法は、Pythonスクリプトをたとえばとして保存し、script.pybashスクリプトから呼び出すか、または呼び出すことです。後ろにバッシュスクリプト:

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

または

script.sh && script.py

関連情報