Ama*_*esh 15 python shell-script
我需要在 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 <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()
Run Code Online (Sandbox Code Playgroud)
Dal*_*jia 31
只需将 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"
Run Code Online (Sandbox Code Playgroud)
mkc*_*mkc 17
如果您想将 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
Run Code Online (Sandbox Code Playgroud)
现在运行pyinbash.sh将产生:
$ chmod 755 pyinbash.sh
$ ./pyinbash.sh
Exe
Run Code Online (Sandbox Code Playgroud)
小智 5
如其他几个答案所示(但未解释),\n以及 Python\xc2\xa03.11.1 文档\n命令行和环境中记录的\n,您可以使用:-c\xc2\xa0command
\n\n
-c\xc2\xa0command\n
\n
command执行.\xe2\x80\x82\n中的 Python 代码command可以是由换行符分隔的一个或多个语句,\n与正常模块代码一样具有重要的前导空格。
换句话说,您可以将整个 Python 脚本放入 Bash 字符串中。\xc2\xa0\n这里\xe2\x80\x99s 是一个稍微复杂的\xe2\x80\x8a/\xe2\x80\x8a 复杂的方法,\n使用命令替换和\xc2\xa0here\xc2\xa0文档:
\n#!/bin/bash\npython3 -c "$(cat << EOF\n\na = input(\'?>\')\nprint(\'you typed\', a)\nprint(\'\\033[1;32mbye...\\033[m\')\n\nEOF\n)" \nRun Code Online (Sandbox Code Playgroud)\n这是可行的。\xc2\xa0\n\xc2\xa0 $()(命令替换)将内部命令的输出\n(在本例中cat)作为参数传递给 Python。\xc2\xa0\n没有管道,因此标准输入可以在 Python 代码中使用。
这种更简单的方法(使 Python 脚本成为\xc2\xa0文字字符串)\n也有效:
\n#!/bin/bash\n\npython3 -c "\na = input(\'?>\') \nprint(\'you typed\', a)\nprint(\'\\033[1;32mbye...\\033[m\')"\nRun Code Online (Sandbox Code Playgroud)\n这在 Bash 中存在双引号字符串的常见问题:\nshell 元字符"、$和`\xc2\xa0\\需要\xc2\xa0 进行转义。\xc2\xa0\n例如,如果\xc2\xa0则需要\xc2 \xa0"在你的Python代码中使用,\n你应该像这样转义它:
#!/bin/bash\n\npython3 -c "\na = input(\'?>\') \nprint(\\"you typed\\", a)\nprint(\\"\\033[1;32mbye...\\033[m\\")"\nRun Code Online (Sandbox Code Playgroud)\n但是为什么不将 Python 代码中的所有单引号更改为双引号,并将整个 Python 脚本放入单引号中呢?
\n#!/bin/bash\n\npython3 -c \'\na = input("?>")\nprint("you typed", a)\nprint("\\033[1;32mbye...\\033[m")\'\nRun Code Online (Sandbox Code Playgroud)\n相似地,
\n$ python3 -c "print(\'An odd string:\', \'$((6*7))\')"\nAn odd string: 42\n\n$ python3 -c \'print("An odd string:", "$((6*7))")\'\nAn odd string: $((6*7))\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
90051 次 |
| 最近记录: |