26_第五章-通过文件句柄的方式传参
一、理论
1、subprocess模块
- 知识回顾
- 调用系统命令1代码
import subprocess #2、定义一个函数调用系统的所有命令 def run_cmd(command): #初始化一个子进程执行系统命令 #subprocess.PIPE 接受子进程的返回信息,一定需要解码,指定编码GBK #DEVNULL:把爱stdin、stdout、stderr的信息丢掉,不输出 return_cmd = subprocess.run(command,stdout=subprocess.DEVNULL,stderr=subprocess.PIPE,encoding='GBK',shell=True) return_cmd = subprocess.run(command,stdout=subprocess.PIPE,stderr=subprocess.STDOUT,encoding='GBK',shell=True) # return_cmd = subprocess.run(command,stdout=subprocess.PIPE,stderr=subprocess.PIPE,encoding='GBK',shell=True) if return_cmd.returncode == 0: print("success:") print(return_cmd.stdout) else: print("命令执行错误:") print(return_cmd.stderr) run_cmd('dir D:\\') run_cmd('ipconfig') run_cmd('exit 1')
stderr=subprocess.STDOUT意义:
stderr的数据和stdout的数据合并起来,通过subprocess.PIPE一起传出,返回给主进程
2、subprocess模块之run方法
二、实操案例
1、代码:调用系统命令2
2、运行结果
3、分析
在本节中收获小结如下
(1)文件路径有两种输入方式
# f = open("D:\\ini.txt") f = open("D:/ini.txt")
(2)使用句本传参不方便
不如python内置的读文件方式方便;
如果一定要调用操作系统读文件,要使用后面将讲到Popen方式
三、源代码
# -*- coding:utf-8 -*-
import subprocess
#错误的文件路径
# f = open(r"D:\in.txt")
#以下两种路径输入方式皆可
# f = open("D:\\ini.txt")
f = open("D:/ini.txt")
#文件句本传参交不方便 #以后给命令传参一定用Popen
#shell参数默认为Flase,设为True表示通过操作系统执行
# return_cmd = subprocess.run('python',stdin=subprocess.PIPE,stdout=subprocess.PIPE,shell=True) #不再使用PIPE传参,改用f
return_cmd = subprocess.run('python',stdin=f,stdout=subprocess.PIPE,shell=True)
#以下方式运行看不到报错
# return_cmd = subprocess.run('python',stdin=f,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
return_cmd.stdin = 'print("hello laoteng")'
# return_cmd = 'print("hello laoteng")'
f2 = open("D:/ini.txt",'r')
cmd_output = return_cmd.stdout
print('f2:',f2.readlines())
print('cmd_output:',cmd_output)