我想重定向gnu make。 想要將ALL重定向到STDOUT和all.log,並且只向error.log發生錯誤。在python中使用os.system時出錯,但在shell中不存在
下面是我的程序
#!/usr/bin/env python
import optparse
import os
import sys
import commands
command = 'make all > >(tee -a all.log) 2>&1 2> >(tee -a error.log)'
SysReturnVal=os.system(command)
print "system return value is ", SysReturnVal
當我執行它越來越
sh: -c: line 0: syntax error near unexpected token `>'
sh: -c: line 0: `make all > >(tee -a all.log ) 2>&1 2> >(tee -a error.log)'
但是在Linux上的bash shell執行同一指令的執行沒有錯誤。
make all > >(tee -a all.log) 2>&1 2> >(tee -a error.log)
爲什麼在使用os.system在python腳本中運行時失敗,但在終端/ bash shell中沒有?
哪個殼您使用的?它看起來像你正在試圖做一些在你的shell中工作的非可移植的東西,而不是用'sh'。 – Biffen
sh指向centos中的bash 6.4。我在bash上嘗試了相同的命令,並且它工作正常,並且在python中,與os.system相同的命令因sh錯誤而失敗。 –
當您通過名爲'sh'的符號鏈接運行Bash時,Bash將以'sh'兼容模式運行,並且不會讓您使用任何Bashisms。您可以嘗試交互式運行'/ bin/sh'並查看其差異。 – Biffen