繁体   English   中英

bash PIPE 等效于 Python

[英]bash PIPE equivalent in Python

我正在将bash脚本转换为python脚本。 在 bash 脚本中,有一个部分基本上发送邮件,例如

( echo "some_body"
  echo "some header"
 ) | ./sendmail to_user@mail.com

我正在尝试像这样转换它

from subprocess import Popen, PIPE, STDOUT
p = Popen(['./sendmail', 'to_user@mail.com'], stdout=PIPE, stdin=PIPE, stderr=PIPE)
stdout_data = p.communicate(input='data_to_write')[0]

但我不确定如何传递多个输入,例如 bash 脚本中显示的多重echo

附加问题:

除此之外,我还有一个问题,在 bash 脚本中,始终有一个命令位于顶部,例如

. /opt/../some_necessary_exports.sh
.
.
. other stuff

这里some_necessary_exports.sh就像

export SOMETHING="some_thing"
export SOME_OTHER_THING="some_other_thing"
.
.
.

在 python 脚本中,我使用子进程模块调用 Linux 命令,例如——

p1 = Popen(['bash', 'some_necessary_exports.sh'], stdout=PIPE, stdin=PIPE, stderr=PIPE)

p2 = Popen(['bash', 'other_command'], stdout=PIPE, stdin=PIPE, stderr=PIPE)

p3 = Popen(['bash', 'other_command'], stdout=PIPE, stdin=PIPE, stderr=PIPE)

我不确定这些导出是否会保留在其他命令中。 处理这个问题的最佳方法是什么?

只需将要发送的字符串与它们之间的换行符连接起来。

stdout_data = p.communicate(input=some_header + "\n" + some_body)[0]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM