我一直在尝试通过将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
答案 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/