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

背景

最近工作中有遇到这样一种情况,需要执行一个 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 来演示了,这里有点遗憾,只能成功自动传入一个输入参数,如果有人知道请留言,不胜感激。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/wumingxiaoyao/article/details/121178835