Cara memasukkan skrip python ke dalam skrip bash


13

Saya perlu memasukkan skrip python di bawah ini ke dalam skrip bash.

Jika skrip bash berhasil, saya harus menjalankan skrip di bawah ini:

#!/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
Mengapa "memasukkan" itu? Kenapa tidak jalankan saja?
terdon

1
Untuk memanggil bash-script dari pythonimport os os.system ("./script.sh")
Costas

Jawaban:


8

Anda dapat menggunakan heredoc jika Anda ingin menyimpan sumber skrip bash dan python secara bersamaan. Misalnya, katakan berikut ini adalah isi dari sebuah file bernama 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

Sekarang menjalankan pyinbash.shwasiat menghasilkan:

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

Per komentar OP untuk jawaban lain, saya memperbarui jawaban saya yang menangani variabel bash dalam skrip python.
mkc

1
Saya tidak bisa mendapatkan nilai variabel dari bash-script menjadi skrip python.
Amal P Ramesh

Saya mengganti subprocess.call (["echo", "\ $ bashvar"]) menjadi subprocess.call (["echo", "bashvar"]) sekarang berfungsi.
Amal P Ramesh

Itu cukup rapi!
SexyBeast

17

Cukup kirimkan HereDoc ke python -.

Dari bantuan 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"

Saya tidak mengerti mengapa ini diturunkan. Ini solusi sederhana dan bisa diterapkan untuk beberapa kasus. Itu memang memiliki batasan (utama) bahwa Anda tidak dapat menggunakan input standar dalam skrip python, (karena menerima stdin dari heredoc).
pyrocrasty

Saya benci downvotes tanpa komentar. Ini bekerja untuk saya. Diperbaharui ;-)
kev

Dipvariasikan jawaban ini karena (tidak seperti jawaban yang diterima) itu tidak menulis skrip ke sistem file.
Huw Walters

2

Pendekatan paling sederhana adalah dengan hanya menyimpan skrip python sebagai, misalnya script.pydan kemudian memanggilnya dari skrip bash, atau memanggilnya setelah skrip bash:

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

Atau

script.sh && script.py

Pada waktu eksekusi bash-script beberapa variabel didefinisikan, saya memerlukan ini pada skrip python untuk isi pesan.
Amal P Ramesh

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.