【问题标题】:Handling Shell Redirection in Python subprocess.Popen()在 Python subprocess.Popen() 中处理 Shell 重定向
【发布时间】:2013-08-01 17:19:53
【问题描述】:

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

cmd = 'convert_something.tcl some_file >! output_file'

这使得他们的脚本(Tcl、Perl、Python、C/C++)的转换更容易。 (我预见到将来会改变它,但现在......) subprocess.Popen() 命令如下所示:

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

但是,无论如何使用 Popen 的参数,我都无法进行重定向。我目前在 tcsh shell 中工作,但我也尝试过 bash。我尝试过指定 shell,如下所示:

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

但是它给了我一个执行程序的错误,我认为我希望会发生这种情况。我已经阅读并重新阅读了文档并进行了搜索,但没有运气。

我一定遗漏了一些明显的东西,因为我记得以前做过这个(而且很有效)。任何建议将不胜感激。

【问题讨论】:

    标签: python redirect subprocess popen


    【解决方案1】:

    您应该能够“按原样”提交命令,例如。

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

    【讨论】:

    • 确实,你是对的。当我将命令拆分为列表时,这可能是由于 Popen 处理列表(或序列)的方式导致它失败的原因。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2020-04-09
    • 1970-01-01
    • 1970-01-01
    • 2017-08-21
    • 2020-01-22
    • 1970-01-01
    • 1970-01-01
    • 2013-04-14
    相关资源
    最近更新 更多