import subprocess
import eg31 #登录系统
import eg321 #管理员系统
import eg33 #读者系统
# 执行 eg31.py
result = subprocess.run(r'C:\Users\付志贤\Desktop\code\03\eg31.py', stdout=subprocess.PIPE, shell=True)
# 定义包含中文字符的 str 字符串
my_string = '读者'
# 将 str 转换成 bytes,使用 UTF-8 编码
my_bytes = my_string.encode('utf-8')
# 判断输出中是否包含 "读者" 这两个字
if my_bytes in result.stdout:
# 输出包含 "读者",则执行 eg33.py
subprocess.run(r'C:\Users\付志贤\Desktop\code\03\eg33.py',subprocess.PIPE, shell=True)
else:
# 输出不包含 "读者",则执行 eg321.py
subprocess.run(r'C:\Users\付志贤\Desktop\code\03\eg321.py',subprocess.PIPE, shell=True)
为什么运行时不管eg31.py文件的运行结果是什么,都只会执行eg33.py?
这段代码在执行时存在问题:
subprocess.run()
函数时,需要使用关键字参数传递参数值,例如:subprocess.run('command', stdout=subprocess.PIPE, shell=True)
在第 11 行时,使用 in
操作符来判断一个 bytes 对象是否包含另一个 bytes 对象,需要将 my_bytes
转换成字符串类型,再与 result.stdout
进行比较。同时,需要在 if
语句中添加 result.returncode == 0
条件判断,以确定命令是否执行成功。
在第 14 行和第 17 行中,都存在类似的问题。
下面是修改后的代码:
import subprocess
import eg31 #登录系统
import eg321 #管理员系统
import eg33 #读者系统
# 执行 eg31.py
result = subprocess.run(['python', 'C:/Users/付志贤/Desktop/code/03/eg31.py'], stdout=subprocess.PIPE, shell=True)
# 将 bytes 类型的数据转换为 str 类型
result_str = result.stdout.decode('utf-8')
# 判断输出结果中是否包含 "读者" 这两个字,并且命令执行成功
if '读者' in result_str and result.returncode == 0:
# 输出包含 "读者",则执行 eg33.py
subprocess.run(['python', 'C:/Users/付志贤/Desktop/code/03/eg33.py'], stdout=subprocess.PIPE, shell=True)
else:
# 输出不包含 "读者",则执行 eg321.py
subprocess.run(['python', 'C:/Users/付志贤/Desktop/code/03/eg321.py'], stdout=subprocess.PIPE, shell=True)
在使用时,需要将 subprocess.run()
函数中的路径修改为实际文件所在的路径。