在Python子流程中处理Shell重定向.Popen()



我正在开发一个Python(2.7)模块,该模块将允许用户在本地运行命令或将作业提交到负载共享工具(如LSF,但是自主开发的)。在这种情况下,我希望用户能够像这样提交他们的命令:

cmd = 'convert_something.tcl some_file >! output_file'

这使得他们的脚本(Tcl、Perl、Python、C/C++)的转换更加容易。(我预计未来会改变这一点,但目前…)子流程。Popen()命令如下:

args = cmd.split()
p = subprocess.Popen(args, shell=True)

然而,无论怎么和波本争论,我都无法重新定向工作。我目前在tcsh shell中工作,但我也尝试过bash。我试着指定shell,就像这样:

p = subprocess.Popen(args, executable='/bin/bash', pre_exec=oc.setsid)

但它在执行程序时给了我一个错误,我想我预计会发生这种情况。我已经阅读了一遍又一遍的文档并进行了搜索,但没有运气。

我一定错过了一些显而易见的东西,因为我记得以前做过这件事(而且效果很好)。如有任何建议,我们将不胜感激。

您应该能够"按原样"提交命令,例如

cmd = './test.sh > /tmp/ttt.log'
p = subprocess.Popen(cmd, shell = True)

最新更新