【问题标题】:Python equivalent of Java's Redirect.INHERITPython 等效于 Java 的 Redirect.INHERIT
【发布时间】:2016-08-04 16:40:04
【问题描述】:

我正在尝试在 Python 中复制以下用 Java 编写的脚本,但我没有在 Python 中看到等效的 Redirect.INHERIT。移植这个的正确方法是什么?

import java.lang.ProcessBuilder;
import java.lang.ProcessBuilder.Redirect;

public class TestProcessBuilder {
    public static void main(String args[]) {
        try {
            ProcessBuilder builder = new ProcessBuilder("fairymax");
            builder.redirectInput(Redirect.INHERIT);
            builder.redirectOutput(Redirect.INHERIT);
            builder.redirectError(Redirect.INHERIT);

            Process subProcess = builder.start();
            subProcess.waitFor();
        }
        catch (Exception e) {
           e.printStackTrace();
        }
    }
}

【问题讨论】:

标签: java python subprocess processbuilder


【解决方案1】:

Redirect.INHERIT 是 Python 中的默认值。在 Python 中模拟 Java 代码:

#!/usr/bin/env python
import subprocess

rc = subprocess.call("fairymax")

【讨论】:

    【解决方案2】:

    子进程的 Popen.communicate() 方法与提交的代码块做同样的事情。

    import subprocess
    p = subprocess.Popen("fairymax").communicate()
    

    我已经对此进行了测试,它适用于 Python,但不适用于 Jython。

    【讨论】:

    • 没有必要调用.communicate(),除非你重定向stdin/stdout/stderr(如果你在代码中没有看到subprocess.PIPE;不要调用.communicate())。
    猜你喜欢
    • 2023-03-26
    • 1970-01-01
    • 2019-01-31
    • 2011-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    • 2010-10-30
    相关资源
    最近更新 更多