os.devnull和subprocess.pipe之间的区别

时间:2018-09-21 02:54:55

标签: python shell subprocess

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

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

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

这两行都谨慎地执行存储在命令变量中的shell命令(终端上没有输出)-但我不知道两者之间的区别。我是使用子流程的新手。

/ ogs

2 个答案:

答案 0 :(得分:1)

devnull指向Linux中的/ dev / null。当您写入/ dev / null时,它将丢弃收到的所有内容。 管道有两个末端,当您写入一个末端时,另一管道将收到您编写的消息。

答案 1 :(得分:1)

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

subhelp.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与communication()一起使用

Popen是Python 3提供的高级类。 有关此的很好的资源:https://stackabuse.com/pythons-os-and-subprocess-popen-commands/