python subprocess引數shell=True踩到的坑
0x01 問題現象
寫的程式使用subprocess建立子程序執行其他程式,判斷其他程式執行完後進行處理。
在subprocess使用了shell=True,判斷使用者程式退出的程式碼如下
while self.proc.poll() is None:
do_something
判斷子程序是否執行結束,程式在子程序執行結束後,程式碼未向下繼續執行,而是卡在了這個迴圈中。
0x02 原因分析
百度後對shell引數的解釋如下:
shell=True引數會讓subprocess.Popen接受字串型別的變數作為命令,並呼叫shell去執行這個字串,當shell=False是,subprocess.Popen只接受陣列變數作為命令,並將陣列的第一個元素作為命令,剩下的全部作為該命令的引數。
通過檢視伺服器程序可以看到,仍然有程序存在,程序如下
為shell中執行的程式,由此可以得出,shell=true時,子程序在執行完後,shell並沒有退出,而是卡在shell命令中,可由程序看到。
相關推薦
python subprocess引數shell=True踩到的坑
0x01 問題現象 寫的程式使用subprocess建立子程序執行其他程式,判斷其他程式執行完後進行處理。 在subprocess使用了shell=True,判斷使用者程式退出的程式碼如下 while self.proc.poll() is None:
Python pip安裝模組各種踩坑教程
文章目錄 系統環境 python中使用pip安裝模組的方法 如何知道我們的python模組安裝到哪個位置 Cannot uninstall X錯誤的解決方法 系統環境 本教程系統平臺為win7 64位旗艦版。 python
shell學習踩坑
因為前段時間在win10 下面安裝了linux子系統,使用的是Ubuntu18.04 ,然後就開始學習shell了,寫了一個shell 的for迴圈,如下: #!/bin/bash for ((i=1; i<=10; i++)) do echo $i
python+django+djcelery 入門級踩坑
開始: 首先安裝django-celery,使用Redis作為Broker還需要安裝celery-with-redis:pip install django-celery pip install c
Python踩坑之為可變引數的函式,如何動態傳遞多個引數進去
1、使用*(self.installAppPaths)搞定,一開始我就是想要動態傳遞多個 Tkinter.OptionMenu(self.root, self.box_variable, *(self.installAppPaths),command = self.box_list_clic
python subprocess模組的shell引數問題
昨天除錯其他同學的程式碼時,發現對於subprocess模組所傳的args變數,與shell變數存在關聯,傳值不當會有各種問題。比較有趣,就記錄一下。 args is required for all calls and should be a
Python踩坑之旅其一殺不死的Shell子程序
目錄 1.1 踩坑案例 1.2 填坑解法 1.3 坑位分析 1.4 坑後擴充套件 1.4.1 擴充套件知識 1.4.1 技術關鍵字 1.5 填
Python之系統shell交互(subprocess)
pycharm tar 命令行 安全 false resolv turn 等價 如何 os與commands模塊 subprocess模塊 subprocess.Popen類 總結 我們幾乎可以在任何操作系統上通過命令行指令與操作系統進行交互,比如Linux平臺下的sh
python 3.6.1 安裝scrapy踩坑之旅
ext href sta 版本 deb targe IE src pyw 系統環境:win10 64位系統安裝 python基礎環境配置不做過多的介紹 window環境安裝scrapy需要依賴pywin32,下載對應python版本的exe文件執行安裝,下載的pywin
python selenium 踩坑
from int find 微博 登陸 selector pytho row exce 想做做信息檢索課設,先寫個爬蟲爬爬微博。 看了一下午微博的api,晚上決定用chromnium。 先通過pip安裝selenium,官方文檔看一眼, pip install sel
《用Python寫網路爬蟲》第一章踩坑
教程使用環境為pyhon2.x,使用python3.x進行學習時遇到一些坑,記錄下解決辦法。 由於python2.x中的urllib2模組在3.x中被整合到了urllib模組中,教程中涉及urllib2的部分的程式碼需調整 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; f
基於Python技術棧的演算法落地踩坑
背景介紹 在一些業務場景,我們需要把離線訓練好的模型以微服務部署線上,如果是簡單的使用sklearn pipeline,可以儲存為XML格式的pmml供Java呼叫,在配置為4 core,8G記憶體的docker環境可以提供8K左右的高併發,並且這種docker可以快速大規模部署到PaaS雲平臺,優勢相
python的multiprocessing模組踩坑記錄
前言 最近做多程序多IP爬蟲,用到的multiprocessing模組有點坑,這裡總結一下,python版本是3.6 踩坑記錄 1、multiprocessing模組的子程序是不會複製父程序的資料的,這和fork函式不一樣,子程序中不會有父程序中的變數,如果子程序執行的
centos7安裝mysql-python 踩坑記
前言:昨天剛把我本地mac 上安裝上了mysql-python 元件, 總結如下 1:brew install mysql 2:pip install mysql-python 大概這樣就能裝好。python 2.7 今天準備把虛擬機器也給安裝上,一波三折,寫個文章記錄如下
每日踩坑 2018-11-26 MVC Razor ActionLink 生成的URL中多生成了一個引數 ?length=n
RouteConfig 的路由註冊如下: routes.MapRoute( name: "Default", url: "{controller}/{action}", def
python預設引數的坑以及最佳實踐
// An example def addEnd(L=[]): L.append("end") return L print addEnd()#["end"] print addEnd()#["end", "end"]坑!!!對一切的列表有記憶了,不是我們想要的 pri
Spring Boot 和 Spring Cloud Feign呼叫服務及傳遞引數踩坑記錄
背景 在Spring Cloud Netflix棧中,各個微服務都是以HTTP介面的形式暴露自身服務的,因此在呼叫遠端服務時就必須使用HTTP客戶端。我們可以使用JDK原生的URLConnection、Apache的
python函式引數的填坑之路
背景 最近在看廖雪峰老師的python3教程之函式的引數 受益匪淺,但是在實踐的過程中,發現了一些不解之謎 兩個錯誤 import _thread import time def func1(x): while x: print(x) x = x -1 _threa
Python踩坑之API文件
1、OptionMenu的API文件 http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/optionmenu.html 2、一開始,我想著乾脆就利用百度得了,反之做完需求就行了,結果各種資料太難找了,還是需要官方的API文件了 3、再
Python之類變數踩坑
1、首先是這樣有個類變數,你要在使用的,如果前面不加類名,那在方法裡就會去找全域性變數 顯然current_workspace_path是個類變數 class MainAc(object): window_TITLE = "Alu測試組工具合集_v1.0" current