Cách bao gồm tập lệnh python bên trong tập lệnh bash


13

Tôi cần bao gồm tập lệnh python bên dưới tập lệnh bash.

Nếu tập lệnh bash kết thúc thành công, tôi cần thực thi tập lệnh bên dưới:

#!/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
Tại sao "bao gồm" nó? Tại sao không chạy nó?
terdon

1
Để gọi bash-script từ pythonimport os os.system ("./script.sh")
Costas

Câu trả lời:


8

Bạn có thể sử dụng heredoc nếu bạn muốn giữ nguồn của cả hai tập lệnh bash và python cùng nhau. Ví dụ: giả sử sau đây là nội dung của tệp có tên 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

Bây giờ chạy pyinbash.shsẽ mang lại:

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

Mỗi bình luận của OP cho một câu trả lời khác, tôi đã cập nhật câu trả lời của mình trong đó quan tâm đến các biến bash trong tập lệnh python.
mkc

1
Tôi không thể lấy giá trị của biến từ bash-script thành python script.
Amal P Ramesh

Tôi thay thế sub process.call (["echo", "\ $ bashvar"]) thành sub process.call (["echo", "bashvar"]) bây giờ nó đang hoạt động.
Amal P Ramesh

Đó là khá gọn gàng!
SexyBeast

17

Chỉ cần vượt qua một HereDoc để python -.

Từ trợ giúp trăn 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"

Tôi không thấy lý do tại sao điều này đã bị hạ thấp. Đó là một giải pháp đơn giản và khả thi cho một số trường hợp. Mặc dù vậy, nó có giới hạn (chính) là bạn không thể sử dụng đầu vào tiêu chuẩn trong tập lệnh python (vì nó nhận được stdin từ heredoc).
pyrocrasty

Tôi ghét downvote mà không bình luận. Nó làm việc cho tôi. Nâng cấp nó ;-)
kev

Nâng cao câu trả lời này vì (không giống như câu trả lời được chấp nhận) nó không ghi tập lệnh vào hệ thống tệp.
Huw Walters

2

Cách tiếp cận đơn giản nhất là chỉ lưu tập lệnh python như, ví dụ script.pyvà sau đó gọi nó từ tập lệnh bash hoặc gọi nó sau tập lệnh bash:

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

Hoặc là

script.sh && script.py

Vào thời gian thực thi bash-script, một số biến được xác định, tôi cần điều này trên tập lệnh python cho phần thân thông điệp.
Amal P Ramesh

0

Làm thế nào về điều này cho một ví dụ:

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


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.