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 -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일반 모듈 코드에서와 같이 상당한 선행 공백이 있는 개행 문자로 구분된 하나 이상의 명령문일 수 있습니다.

즉, 전체 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.py하고 bash 스크립트에서 호출하거나 호출하는 것입니다.뒤쪽에배시 스크립트:

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

또는

script.sh && script.py

관련 정보