python输出可执行文件_重定向-禁止在Python调用中输出可执行文件

重定向-禁止在Python调用中输出可执行文件

我有一个名为B的二进制文件,该文件在调用时会生成输出。 如果从Bash shell调用它,则大多数输出将受到A > /dev/null的抑制。所有输出将受到A &> /dev/null的抑制

我有一个名为B的Python脚本,需要调用B &> /dev/null。我希望能够从B生成输出,同时抑制来自2971490948489937937922的所有输出。

在2971490948489937937920中,我尝试了B、os.system('A > /dev/null')和os.system('A &> /dev/null')923、os.execvp('...')等,但是这些都不抑制A的所有输出。

我可以运行B &> /dev/null,但是那也抑制了B的所有输出,我不希望这样。

有人有建议吗?

Lin asked 2020-07-18T06:06:25Z

9个解决方案

102 votes

import os

import subprocess

command = ["executable", "argument_1", "argument_2"]

with open(os.devnull, "w") as fnull:

result = subprocess.call(command, stdout = fnull, stderr = fnull)

如果该命令没有任何参数,则可以将其作为简单字符串提供。

如果您的命令依赖于通配符,管道或环境变量之类的外壳功能,则需要将整个命令提供为字符串,并指定shell = True。但是,应避免这样做,因为如果目录中的内容包含安全隐患 的字符串未经过仔细验证。

DNS answered 2020-07-18T06:07:09Z

57 votes

如果您拥有Python 2.4,则可以使用子流程模块:

>>> import subprocess

>>> s = subprocess.Popen(['cowsay', 'hello'], \

stderr=subprocess.STDOUT, stdout=subprocess.PIPE).communicate()[0]

>>> print s

_______

< hello >

-------

\ ^__^

\ (oo)\_______

(__)\ )\/\

||----w |

|| ||

Manuel answered 2020-07-18T06:06:44Z

21 votes

在Python 3.3及更高版本中,open(os.devnull)支持重定向到open(os.devnull)的选项。要使用它,在调用.Popen和朋友时,请指定stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL,作为关键字参数。

因此,针对Python 3.3+重写的DNS答案变成了

import subprocess

command = ["executable", "argument_1", "argument_2"]

result = subprocess.call(command,

stdout=subprocess.DEVNULL,

stderr=subprocess.DEVNULL)

从文档中:

subprocess.DEVNULL¶

可用作stdin,stdout或stderr的特殊值 Popen的参数,表示特殊文件os.devnull将 使用。

版本3.3中的新功能。

对于Python 3.0至3.2,您必须使用DNS所写的方法使用open(os.devnull)手动打开空设备。

Mechanical snail answered 2020-07-18T06:07:55Z

12 votes

如果您的搜索引擎使您(与我一样)遇到这个老问题,请注意使用PIPE可能会导致死锁。实际上,由于管道是缓冲的,因此即使没有人读取管道,也可以在管道中写入一定数量的字节。 但是,缓冲区的大小是有限的。 因此,如果您的程序A的输出大于缓冲区,则A将在写入时被阻塞,而调用程序B等待A的终止。但是,在这种情况下,则不会。请参阅下面的注释。

不过,我还是建议使用Devin Jeanpierre和DNS的解决方案。

Po' Lazarus answered 2020-07-18T06:08:20Z

8 votes

如os.system()文档所述,请使用子进程模块,并在打开子进程时设置stdout = open(os.devnull,'w')(对于stderr可能也是如此)。

Devin Jeanpierre answered 2020-07-18T06:08:40Z

1 votes

我知道游戏已经晚了,但是为什么不简单地从os.system中将输出重定向到/ dev / null呢? 例如。:

tgt_file = "./bogus.txt"

os.sytem("d2u '%s' &> /dev/null" % tgt_file)

这似乎适用于您不想处理subprocess.STDOUT的情况。

Rob Carr answered 2020-07-18T06:09:05Z

0 votes

如果只需要捕获STDOUT,就不将其分配给变量吗? 例如:

megabyte=''

# Create a 1 MiB string of NULL characters.

for i in range(1048576):

megabyte += '\0'

fh=open('zero.bin','w')

# Write an 8 GiB file.

for i in range(8192):

print(i)

# Suppress output of 'write()' by assigning to a variable.

discard=fh.write(megabyte)

fh.close()

我在硬盘上创建了一个零填充的大文件,将零可用空间发现,每次对handle.write(string)的调用都吐出了写入的字节数。 将其分配给可变参数会抑制该输出。

ECJB answered 2020-07-18T06:09:29Z

0 votes

如果您不想等待命令完成(例如开始备份任务),另一种选择是通过bash传递命令,这样做可以使重定向正常运行。

例如,使用aplay启动声音文件:

import os

def PlaySound(filename):

command = 'bash -c "aplay %s &> /dev/null &"' % (filename)

os.system(command)

这样,我可以生成一个新进程,而不必等待它完成并停止将其打印到终端。唯一的问题是它将加载bash实例以及您正在运行的进程,从而提供少量开销。

PiBorg answered 2020-07-18T06:10:01Z

0 votes

我用:

call(command, stderr=subprocess.PIPE, stdout=subprocess.PIPE)

其中command是命令的字符串+参数

为此,您必须导入子流程

TTT answered 2020-07-18T06:10:30Z

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/266224.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全国计算机等级考试题库二级C操作题100套(第80套)

第80套&#xff1a; 给定程序中&#xff0c;函数fun的功能是&#xff1a;将形参n中&#xff0c;各位上为偶数的数取出&#xff0c;并按原来从高位到低位的顺序组成一个新的数&#xff0c;并作为函数值返回。 例如&#xff0c;从主函数输入一个整数&#xff1a;27638496&#x…

记一次B站答题经历

第一题部分&#xff1a;社区规范卷 --------- ------------ 第二题&#xff1a;社区规范第二部分 -------------------- 第三部分自由选择题 ---------------------- -------------------------------- 最后答题成绩得分 -------------- ------------- 答完题后的感受&#xff…

linux 安装程序丢失链接动态库,Linux安装软件过程中提示缺少动态链接库.so的解决方法...

Linux在安装软件的时候有时会出现错误&#xff0c;提示缺少动态链接库.so&#xff0c;该问题是由什么原因导致的呢?情况分析&#xff1a;1.缺少动态连接库.so-cannot open shared object file:No such file or directory2.缺少动态连接库.so.0-cannot open shared object file…

全国计算机等级考试题库二级C操作题100套(第81套)

第81套&#xff1a; 给定程序中&#xff0c;函数fun的功能是&#xff1a;在形参s所指字符串中的每个数字字符之后插入一个号。例如&#xff0c;形参s所指的字符串为&#xff1a;def35adh3kjsdf7。执行结果为&#xff1a;def35adh3kjsdf7*。 请在程序的下划线处填入正确的内容并…

菜鸟python爬虫_Python爬虫学习-基础爬取

编译环境&#xff1a;python v3.5.0, mac osx 10.11.4第三方库&#xff1a;针对网页解析&#xff0c;python有丰富的第三方库如:BeautifulSoup, urllib, requests etc.可以通过import来引入指定第三方库&#xff0c;通过from lib import function导入第三方库中的指定函数。如&…

点云赋值 PointCloudT::Ptr 运行时崩溃

PointCloudT::Ptr cloud; cloud.reset(new PointCloudT); cloud->points.resize(500);for(int index 0;index <500;index){  cloud->point[index].x 1.0; cloud->point[index].y 1.0;}采用以上方式赋值程序崩溃。Point t; for(int index 0;index <500;ind…

yaf(5) smarty

2013年4月6日 13:41:37 参考: http://www.oschina.net/question/812776_71817 http://yaf.laruence.com/manual/yaf.class.dispatcher.setView.html 这两者都是在bootstrap.php中写_initSmarty()函数来重新实现yaf的视图接口 这中方案默认的是存放模版文件的上级文件夹名字必须…

全国计算机等级考试题库二级C操作题100套(第82套)

第82套&#xff1a; 给定程序中&#xff0c;函数fun的功能是&#xff1a;找出100&#xff5e;999之间&#xff08;含100和999&#xff09;所有整数中各位上数字之和为x&#xff08;x为一正整数&#xff09;的整数,然后输出&#xff1b;符合条件的整数个数作为函数值返回。 例如…

linux最小安装桌面,Linux工作环境:CentOS7最小安装+Xfce桌面环境

ref: https://blog.csdn.net/smstong/article/details/448029893.1 执行CentOS7 最小安装去官网下载CentOS-7.0-1406-x86_64-Minimal.iso&#xff0c;然后刻录光盘&#xff0c;安装之。安装完成后执行yum update更新系统。然后&#xff0c;执行# yum install epel-release安装额…

python自动获取cookie_selenium3+python自动化12-cookie相关操作(获取和删除)

前言在进行接口测试或者自动化测试时&#xff0c;有时就要登录好多次&#xff0c;特别麻烦&#xff0c;那能不能不要一遍一遍输入账号&#xff0c;直接跳过登录页面进行操作。这个时候就要用到cookie&#xff0c;这次主要整理cookie的一些操作&#xff0c;包含获取cookie、删除…

Hibernate(三) - hibernate 表操作-多对多配置

Hibernate 的一对多关联映射 之前在学习 Hibernate 的时候&#xff0c;其实都是单表的操作。在实际的开发当中&#xff0c;比如做一个商城&#xff0c;就需要好多张数据库表&#xff0c;表与表之间是有关系的。之前些做一些关联查询或者是一些基本的查询操作的时候&#xff0c;…

linux怎么用命令备份数据库,使用linux的mysqlhotcopy命令备份数据库

使用linux的mysqlhotcopy命令备份数据库发布时间&#xff1a;2020-07-22 11:18:37来源&#xff1a;亿速云阅读&#xff1a;66作者&#xff1a;清晨栏目&#xff1a;服务器这篇文章将为大家详细讲解有关使用linux的mysqlhotcopy命令备份数据库&#xff0c;小编觉得挺实用的&…

全国计算机等级考试题库二级C操作题100套(第83套)

第83套&#xff1a; 给定程序中&#xff0c;函数fun的功能是&#xff1a;找出100至x&#xff08;x≤999&#xff09;之间各位上的数字之和为15的所有整数&#xff0c;然后输出&#xff1b;符合条件的整数个数作为函数值返回。 例如&#xff0c;当n值为500时&#xff0c;各位数…

vb treeview 展开子节点_详解最长公共子序列问题,秒杀三道动态规划题目

学算法认准 labuladong后台回复进群一起力扣?读完本文&#xff0c;可以去力扣解决如下题目&#xff1a;1143.最长公共子序列(Medium)583. 两个字符串的删除操作(Medium)712.两个字符串的最小ASCII删除和(Medium)好久没写动态规划算法相关的文章了&#xff0c;今天来搞一把。不…

TZOJ 4621 Grammar(STL模拟)

描述 Our strings only contain letters(maybe the string contains nothing). Now we define the production as follows: 1. (C) --> C 2. C --> C 3. (C:num)-->repeat C num times. Illustration: (C) or C stands for a string only contains letters. (C:num) m…

[链接]Python中的metaclass、装饰器

深刻理解Python中的元类(metaclass) Python装饰器学习&#xff08;九步入门&#xff09;

linux查看数据积压,查看kafka消息队列的积压情况

创建topickafka-topics --create --zookeeper master:2181/kafka2 --replication-factor 2 --partitions 3 --topic mydemo5列出topickafka-topics --list --zookeeper master:2181/kafka2描述topickafka-topics --describe --zookeeper master:2181/kafka2 --topic mydemo5生产…

全国计算机等级考试题库二级C操作题100套(第84套)

第84套&#xff1a; 函数fun的功能是&#xff1a;从三个形参a&#xff0c;b&#xff0c;c中找出中间的那个数&#xff0c;作为函数值返 回。 例如&#xff0c;当a3, b5, c4时&#xff0c;中数为4。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注…

python 三引号_Python 基础(一):入门必备知识

目录1 标识符2 关键字3 引号4 编码5 输入输出6 缩进7 多行8 注释9 数据类型10 运算符10.1 常用运算符10.2 运算符优先级1 标识符标识符是编程时使用的名字&#xff0c;用于给变量、函数、语句块等命名&#xff0c;Python 中标识符由字母、数字、下划线组成&#xff0c;不能以数…

排序算法:冒泡和快排 摘自网络

冒泡排序&#xff1a; 首先我们自己来设计一下“冒泡排序”&#xff0c;这种排序很现实的例子就是&#xff1a; 我抓一把沙仍进水里&#xff0c;那么沙子会立马沉入水底&#xff0c; 沙子上的灰尘会因为惯性暂时沉入水底&#xff0c;但是又会立马像气泡一样浮出水面&#xff0c…