【问题标题】:What is the difference between os.devnull and subprocess.pipe?os.devnull 和 subprocess.pipe 有什么区别?
【发布时间】:2018-09-21 02:54:54
【问题描述】:

我一直在尝试如何通过将open(os.devnull, 'w')subprocess.PIPE 分配给stdout 值来打印Python 的subprocess.call() 的shell 输出:

subprocess.call(command, stdout=open(os.devnull, 'w'), shell=True)

subprocess.call(command, stdout=subprocess.PIPE, shell=True)

这两行都谨慎地执行存储在command 变量中的shell 命令,即不在终端上输出。但是,我不知道两者之间的区别。我不熟悉使用subprocess

/ogs

【问题讨论】:

    标签: python shell subprocess


    【解决方案1】:

    第一种方法是将标准输出重定向到文件(POSIX 中为/dev/null),而第二种方法是构建PIPE 以将输出重定向到特定流。

    subprocess.PIPE 的官方定义来自命令 help():“这个模块允许你生成进程,连接到它们的输入/输出/错误管道,并获取它们的返回码。”

    我会说这种方法就像:我们只是在消息队列(内存)中放置一段时间以供以后使用。但是subprocess.call 只是返回状态码。您似乎无法引用subprocess.call(command, stdout=open(os.devnull, 'w'), shell=True) 的返回值,因此您无法引用subprocess.call(command, stdin=the_stdout, shell=True) 的值。很难在两个命令之间建立联系。

    根据本文中的信息:http://blog.acipo.com/running-shell-commands-in-python/

    还有 Python 2.7 文档:https://docs.python.org/2/library/subprocess.html

    建议我们可以将Popen与communicate()一起使用

    Popen 是 Python 3 提供的高级类。 有一个很好的资源:@​​987654323@

    【讨论】:

    • 嗨,感谢您提供全面的答案和相应的参考资料。 /ogs
    • 我的荣幸。你能给我一个分数吗?欣赏。
    • 很遗憾我的rep仍然太低,我无法提高你的分数,但我会在我达到15 rep时立即提高分数。还选择了您的答案作为最佳答案。别客气。 /ogs
    • @CandyCrusher 感谢您的回答。我已尽我所能编辑它。但是,我仍然对 “您似乎无法引用 subprocess.call(command, stdout=open(os.devnull, 'w'), shell=True) 的返回值...很难在两个命令之间建立连接。”感到有些困惑。 请您解释一下这些两句话?提前非常感谢您!
    【解决方案2】:

    devnull 在 Linux 中是一个指向 /dev/null 的点。当您写信给/dev/null 时,它会丢弃收到的所有内容。

    pipe有两端,当你写到一端时,另一端pipe会收到你写的消息。

    【讨论】:

    • 能否请您添加更多详细信息,说明为什么 devnull 会丢弃收到的所有内容。谢谢。
    • @CandyCrusher 它指向操作系统中的一个文件,该文件会丢弃它收到的所有内容。这就是为什么像“投诉被发送到 /dev/null”这样的笑话起作用的原因
    猜你喜欢
    • 2013-11-26
    • 2012-03-25
    • 2010-10-02
    • 2011-12-12
    • 2010-09-16
    • 2012-03-14
    • 2012-02-06
    • 2011-02-25
    • 2011-11-22
    相关资源
    最近更新 更多