在Python中,我想调用一个脚本,该脚本在执行时打印到屏幕,同时还记录stdout和stderr流。我有以下一行我要执行的bash代码:
script.sh > >(tee /tmp/success.log) 2> >(tee /tmp/errors.log >&2)
其中script.sh是输出到stdout和stderr的任何脚本。此行将stdout和stderr流捕获到日志文件success.log和errors.log中,并将流输出到stdout,如下所述:How do I write stderr to a file while using "tee" with a pipe?
现在我想在python中使用subprocess.call(that_command_as_str,shell = True)执行此操作,但是python使用/ bin / sh来执行命令而不是/ bin / bash,而vanilla sh不支持重定向的类型。似乎/ bin / sh的使用被硬编码到子进程模块中。任何想法?
答案 0 :(得分:3)
将您的命令包裹在/bin/bash -c "your-command-stuff"
。
然后/ bin / sh将运行bash,它将为您解释其余部分。您还可以考虑使用Python Subprocess中的其他函数来进行重定向,但上述内容应该快速有效。