python 如何调用子程序并自动传参数 os.system os.popen subprocess

本文介绍了如何使用Python的os和subprocess模块来执行批处理文件,并进行参数传递和获取输出。通过os.system和os.popen,演示了执行bat文件的基本方法,但无法直接传递输入参数。然后,利用subprocess.Popen实现了自动输入参数和获取输出结果的功能,提高了工作效率。
摘要由CSDN通过智能技术生成

背景

最近工作中有遇到这样一种情况,需要执行一个 exe 文件更改某些设置来触发某 Service 工作,而执行这个 exe 程序需要一个屏幕输入参数,这个输入参数也是需要 python 脚本生成的。如果每次都是 cmd 执行这个 exe 程序,把 python 生成的输入参数 copy到 cmd console 上,有些麻烦。所以就研究了一下 python 如何运行其它程序,提高一下工作效率,也增长点知识。

准备一个 bat 脚本

写个 Bat 脚本来实现除法运算,命名为 test.bat

@echo off
echo division calculator
set /p a=Please input divident a: 
set /p b=Please input divisor b: 
set /a result=%a%/%b%
echo Result a/b =%a%/%b% = %result%
pause

执行如下:
在这里插入图片描述

python os.system

python os.system 可以用来执行系统命令,但是没法传递屏幕输入参数,也没法获取程序执行输出结果。

os.system 来运行一下上面的 test.bat 文件

import os

result = os.system('test.bat')
print(result)

执行结果:
在这里插入图片描述
注意需要手动输入两个参数,result的结果是 0,表示程序执行成功。

os.popen

用于从一个命令打开一个管道,返回结果是一个连接管道的文件对象,该文件对象的操作方法同open(),可以从该文件对象中读取返回结果。如果执行成功,不会返回状态码,如果执行失败,则会将错误信息输出到stdout,并返回一个空字符串。

import os

result = os.popen('test.bat')
print('ouput result:')
print(result.read())

执行结果,手动输入两个参数,可以看出屏幕结果都输出了。
在这里插入图片描述
异常输出:
在这里插入图片描述

subprocess

subprocess 模块允许我们启动一个新进程,并连接到它们的输入/输出/错误管道,从而获取返回值。

一个简单的 test2.bat 文件

@echo off
set /p a=Please input a number:
echo your input is %a%
pause

在这里插入图片描述
Python 调用

import subprocess

p = subprocess.Popen(["test2.bat"], 
                     stdin=subprocess.PIPE, stdout=subprocess.PIPE, encoding="utf-8",universal_newlines=True)                  
stdout, stderr = p.communicate('12\n') 
print(stdout)

不用手动输入input 参数了,还可以打印输出结果。

本人没法成功传两个输入参数,所以没法用上面的 test.bat 来演示了,这里有点遗憾,只能成功自动传入一个输入参数,如果有人知道请留言,不胜感激。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值