python 调用shell 不阻塞_遇到问题---python调用shell脚本时subprocess.check_call不阻塞

遇到的问题

使用命令

subprocess.check_call(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

在ubuntu系统中

python中使用subprocess.check_call调用shell命令。

发现subprocess.check_call的阻塞无效,导致下面的命令缺失信息。

但是同样的代码在centos中是可以顺利运行的。

阻塞效果也正常。

查看线程

使用

ps xf

或者

pstree -up

原因

经过对比排查和思考,应该是环境变量的问题。

仔细对比线程树的输出。

发现使用的执行shell的环境是不一样的。

centOS默认使用的是/bin/bash

ubutu默认使用的是/bin/sh

两者的区别

GNU/Linux操作系统中的/bin/sh本是bash (Bourne-Again Shell) 的符号链接,但鉴于bash过于复杂,有人把bash从NetBSD移植到Linux并更名为dash (Debian Almquist Shell),并建议将/bin/sh指向它,以获得更快的脚本执行速度。Dash Shell 比Bash Shell小的多,符合POSIX标准。

Ubuntu继承了Debian,所以从Ubuntu 6.10开始默认是Dash Shell。

应该说,/bin/sh与/bin/bash虽然大体上没什么区别,但仍存在不同的标准。标记为#!/bin/sh的脚本不应使用任何POSIX没有规定的特性 (如let等命令, 但#!/bin/bash可以)。Debian曾经采用/bin/bash更改/bin/dash,目的使用更少的磁盘空间、提供较少的功能、获取更快的速度。但是后来经过shell脚本测试存在运行问题。因为原先在bash shell下可以运行的shell script (shell 脚本),在/bin/sh下还是会出现一些意想不到的问题,不是100%的兼用。

上面可以这样理解,使用man sh命令和man bash命令去观察,可以发现sh本身就是dash,也就更好的说明集成Debian系统之后的更改。

解决方式

使用subprocess.check_call时指定使用的命令如下:

subprocess.check_call(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,executable="/bin/bash")

注意添加的executable=”/bin/bash”,指明了执行脚本的执行程序是/bin/bash。

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

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

相关文章

android ListView详解

在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示。抽空把对ListView的使用做了整理,并写了个小例子,如下图。 列表的显示需要三个元素:1.ListVeiw …

[html] iframe在更改了src之后,不出现后退或者前进按钮怎么解决?

[html] iframe在更改了src之后,不出现后退或者前进按钮怎么解决? 更改src时可以先删除旧的iframe后,新建一个iframe设置好src添加进去个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。…

python一次性输入3个数_python实现输入数字的连续加减方法

不用库,写了很久,一直出bug,到网上一搜,可以直接输入之后,eval(str)即可得到结果! eval程序如下: sinput("请输入要运算的数字") print("The result is{}".format(eval(s))…

gd动态曲线 php_php中用GD绘制折线图

1 ClassChart{2 private $image; //定义图像3 private $title; //定义标题4 private $ydata; //定义Y轴数据5 private $xdata; //定义X轴数据6 private $seriesName; //定义每个系列数据的名称7 private $color; //定义条形图颜色8 private $bgcolor; //定义图片背景颜色9 priv…

Nginx网站用户认证

一、Nginx网站用户认证 用户认证:用户访问网页时需要输入一个用户名和密码才能打开网页。 nginx的默认网页时安装目录下的html/index.html,配置文件在安装目录下的conf目录中的nginx.conf 无用户认证网页 修改配置文件/usr/local/nginx/conf/nginx.conf(…

STL源码剖析学习二:空间配置器(allocator)

STL源码剖析学习二&#xff1a;空间配置器&#xff08;allocator&#xff09; 标准接口&#xff1a;vlaue_typepointerconst_pointerreferenceconst_referencesize_typedifference_typerebindallocator()--default constructorallocator(const allocator<U>&--copy c…

[html] iframe如何自动调整高度?

[html] iframe如何自动调整高度&#xff1f; 未跨域时&#xff0c;在iframe中利用他的父窗口对象将本页面的滚动高度设置给iframe的height 跨域时&#xff0c;在iframe中将自己的的滚动高设置在本页面内的一个隐藏于父页面不跨域的iframe的hash值&#xff0c; 在隐藏的iframe中…

python selenium 处理弹窗_python+selenium 抓取弹出对话框信息

抓取弹出对话框信息&#xff0c;困挠了我很久&#xff0c;我百度了很久&#xff0c;一直没有找到我想要的内容。最近学习到了。 有两种方法&#xff1a; 1、driver.switch_to.alert.text 2、result EC.alert_is_present()(driver).text 这个要导入from selenium.webdriver.sup…

Nginx基于域名的虚拟主机

一、基于域名的虚拟主机 修改配置文件/usr/local/nginx/conf/nginx.conf 创建新的虚拟主机的根目录和默认网页index.html 重新加载nginx的配置文件 查看两个虚拟主机 因为这两个域名是随便写的&#xff0c;所以需要修改windows系统的hosts文件&#xff0c;让电脑能够解析www.a.…

【100题】第三十四 实现一个队列

一&#xff0c;题目&#xff1a; 生产者消费者线程演示 一个生产者线程将int类型的数入列&#xff0c;一个消费者线程将int类型的数出列 二&#xff0c;分析&#xff1a; 这一个&#xff0c;为操作系统上的一个经典例子&#xff0c;以下是july给出的解答 …

[html] 如何禁止web端的页面缩放?

[html] 如何禁止web端的页面缩放&#xff1f; <meta name"viewport" content"widthdevice-width, initial-scale1,user-scalable0">个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家…

centos安装后两个启动项、_Windows安装Centos7双系统后Windows启动项消失

方法一&#xff1a;在Centos7下root登陆编辑 /boot/grub2/grub.cfgvim /boot/grub2/grub.cfg在第一行添加menuentry "Windows10" {insmod ntfsset root(hd0,)chainloader }其中(hd0, 1)的1代表你的windows10安装所在的盘修改完毕后保存并退出然后设置Windows10为默认…

如何给定两个gps坐标 算出航向角_机器人开发如何配置ROS中的TF变换关系?

当我们进行机器人开发时&#xff0c;常常需要面对TF坐标转换&#xff0c;本文以 Autolabor Pro1 与思岚激光雷达为例&#xff0c;介绍ROS TF的使用。Autolabor Pro1是什么&#xff1f;Autolabor Pro1是一款室内外通用机器人移动底盘。该平台上可集成激光雷达、摄像头、GPS等传感…

Tomcat架构与原理

Tomcat架构与原理 架构图 原理 ①、用户点击网页内容&#xff0c;请求被发送到本机端口8080&#xff0c;被在那里监听的Coyote HTTP/1.1 Connector获得。 ②、Connector把该请求交给它所在的Service的Engine来处理&#xff0c;并等待Engine的回应。 ③、Engine获得请求localhos…

[html] 微软雅黑是有版权的,在页面中使用font-family:Microsoft YaHei会不会有版权问题呢?

[html] 微软雅黑是有版权的&#xff0c;在页面中使用font-family:Microsoft YaHei会不会有版权问题呢&#xff1f; font-family: Microsoft YaHei的写法&#xff0c;个人、商用都不会有版权问题&#xff0c;可以放心使用&#xff01;但是如果是通过font-face引用微软雅黑的话&…

aodv路由协议分析

1 AODV 报文格式 AODV 有三种基本的协议报文类型&#xff1a;RREQ 报文、RREP 报文和RRER 报文。 1.1 RREQ 报文 a. 对RREQ 的处理 接收到RREQ 的结点做如下处理&#xff1a; &#xff08;1&#xff09;创建一个表项&#xff0c;先不分配有效序列号&#xff0c;用于记录反向路径…

rfid射频前端的主要组成部分有_第4章 RFID的射频前端(simple).ppt

(1)阅读器天线电路 * Microchip 公司的13.56 MHz应答器(无源射频卡)MCRF355和MCRF360芯片的天线电路 无源应答器的天线电路多采用并联谐振回路 * 并联谐振回路 在研究并联谐振回路时&#xff0c;采用恒流源(信号源内阻很大)分析比较方便。 并联谐振 谐振条件 - 实际中线圈的电…

c语言转换为python语言_python和c语言

广告关闭 腾讯云11.11云上盛惠 &#xff0c;精选热门产品助力上云&#xff0c;云服务器首年88元起&#xff0c;买的越多返的越多&#xff0c;最高返5000元&#xff01; c语言是编译型语言&#xff0c;经过编译后&#xff0c;生成机器码&#xff0c;然后再运行&#xff0c;执行速…

Tomcat安装与使用

Tomcat安装与使用 Tomcat是JAVA语言编写的&#xff0c;需要jdk环境。jdk从Oracle官网下载&#xff0c;不过要求登录后才能下载。 Tomcat的主配置文件&#xff1a;安装路径下的 conf/server.xml。 Tomcat默认监听8080端口。 下载&安装jdk #卸载或升级自带的java环境。 #查找…

COJ1196(Staginner 去爬山)

题目大意&#xff1a;给定一个n*m的只含0和1的矩阵&#xff0c;从矩阵的最后一行中的某个1出发&#xff0c;每步只能走到相邻的且是1的格子中&#xff0c;求能达到的最大高度&#xff08;最小行数&#xff09;。 这题直接DFS即可&#xff0c;复杂度为O(N*M)。 View Code 1 #in…