python执行cmd subprocess持续_Python subprocess 使用的几个小问题
一般调用
我们使用subprocess.Popen进行如下的子进程调用:
import subprocess
cmd = ['ls']
process = subprocess.Popen(cmd, stdout=subprocess.PIPE)
for stdout_line in iter(process.stdout.readline, b''):
print(stdout_line)
process.stdout.close()
return_code = process.wait()
if return_code:
raise subprocess.CalledProcessError(return_code, cmd)
shell=True
但当在Windows平台下运行dir命令,报错:FileNotFoundError: [WinError 2] The system cannot find the file specified。
解决方法,添加shell=True参数。
原因是:dir不是单独的命令,其是CMD(Windows 的shell)的内置程序,所以加shell=True参数。
注意:仅在绝对必要时才应使用shell=True。
import subprocess
cmd = ['dir']
process = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)
for stdout_line in iter(process.stdout.readline, b''):
print(stdout_line)
实时读取子进程输出
有时,发现运行的子进程,上述代码不会即时打印输出,而是要等个几秒钟。
原因是:子进程所运行的程序没有对stdout进行flush,比如C语言的printf没有即时flush时,其打印的输出其实是在缓冲区中的,得等缓冲区满了才集体输出一次。
解决方法:子进程如何运行的是Python,比较简单,添加os.environ["PYTHONUNBUFFERED"] = "1"即可。
如果是在Linux平台运行一般程序,添加cmd = ["stdbuf", "-oL"] + cmd即可。
如何为子进程添加环境变量
通过env=参数。
注意:只传我们想添加的那个环境变量(比如LD_LIBRARY_PATH)是不行,子进程默认是使用很多父进程的环境变量,因此先copy父进程的环境变量,再添加我们需要的。
my_env = os.environ.copy()
my_env['LD_LIBRARY_PATH'] = '../libs/x64/'
cmd = ['command']
popen = subprocess.Popen(cmd,
stdout=subprocess.PIPE,
env=my_env)
子进程切换工作目录
有时,我们的子进程需要在特定的目录里运行。
解决:使用cwd=环境变量。
pwd = os.path.dirname(__file__)
cmd = ['command']
popen = subprocess.Popen(cmd,
stdout=subprocess.PIPE,
cwd=os.path.join(pwd, '..', 'bin'))
python执行cmd subprocess持续_Python subprocess 使用的几个小问题相关推荐
- python发送cmd命令_用Python 执行cmd命令
我们通常可以使用os模块的命令进行执行cmd 方法一:os.system os.system(执行的命令) # 源码 def system(*args, **kwargs): # real signa ...
- windows python 执行cmd 命令启动浏览器跳转到指定网页
windows python 执行cmd 命令启动浏览器跳转到指定网页 1.系统默认浏览器打开百度 cmd命令 # 有没有http都是可以的 start www.baidu.com python im ...
- python执行cmd subprocess持续_如何通过 subprocess 持续获取输出内容
这里将告诉您如何通过 subprocess 持续获取输出内容,教程操作步骤: 在实际应用中会用到subprocess的Popen方法执行一些命令,而我们需要通过执行这个命令的来获取输出进行一些信息记录 ...
- python执行系统命令的方法_python执行系统命令的方法 :os.system(),subprocess.popen(),command...
最近接触到os.system(),subprocess.popen()和commands来执行系统命令,从网上搜索到许多,现整理如下. 1. 使用os.system("cmd") ...
- python执行系统命令的方法:subprocess
适用于Python3 subprocess 可以执行shell命令的相关模块和函数有: os.system os.spawn os.popen –废弃 popen2.* –废弃 commands.* ...
- python subprocess使用_Python subprocess模块用法详解
在 Python 2.7 及 Python 3 中,系统自带了 subprocess 模块,该模块主要用来管理子进程. 在使用该模块之前需要将其引入,方法如下: import subprocess 在 ...
- python shell 继承 环境变量_Python subprocess shell 丢失环境变量 | 学步园
问题: 今天遇到一个问题,我用一个python module通过subprocess以shell的方式调用另一个python module,结果导致丢失环境变量. 事实上,无论是python还是jav ...
- python subprocess模块_python subprocess模块详解
一.subprocess标准库 python执行shell脚本,通常会使用so模块中的几个方法,如system.spawn*.popen等.subprocess标准库的引入就是为了取代这些老的模块方法 ...
- python执行cmd并返回是否成功_python脚本执行CMD命令并返回结果的例子
最近写脚本的时想要用python直接在脚本中去执行cmd命令,并且将返回值打印出来供下面调用,所以特意查了下,发现主要有一下几种方式来实现,很简单: 就拿执行adb, adb shell, adb d ...
最新文章
- 【网络流】解题报告:luogu P2740 [USACO4.2]草地排水Drainage Ditches(Edmonds-Karp增广路,最大流模板)
- sql%notfound与exception
- 一致性Hash算法(KetamaHash)的c#实现
- HALCON测量工具
- Java 动作事件_java按钮动作事件
- 深度解读 MongoDB 4.4 新特性
- 16位的数字高字节和低字节_显示掩盖较低和较高的16位数字半字节| 8086微处理器...
- 判断点是否在三角形内
- 快手大数据架构演进实录
- 以太坊开发入门,完整入门篇
- Linux系统管理---RAID磁盘阵列
- Android 关于 ActionBarSherlock 的使用
- 获取微信运动 php,微信运动数据抓取(PHP语言)
- 编程的修炼(中英双语)
- LEADTOOLS V20,史无前例荣耀归来!!!
- 云分享YFX软件合集-开车不是儿戏!这些坏习惯,时时刻刻威胁着你的生命安全
- 还有哪些不错的正规Java培训机构
- poj1008 -- 玛雅历
- 补数的概念和取模运算
- win7系统语言栏默认输入法怎么设置教学分享