程序目录结果
- DemoProject 根目录
- path1 子目录
- test.py 测试程序
- demo.py shell会话保持demo
- path1 子目录
测试程序
test.py
from time import sleep
if __name__ == '__main__':
for i in range(0, 100):
print(f"{i}_*" * 100)
print("\n")
sleep(.5)
subprocess Popen
使用
subprocess.Popen
创建了一个子进程,并通过stdin
参数将输入流连接到子进程的标准输入。然后,使用communicate
方法与子进程进行交互,发送命令并获取输出结果。可以使用text=True
来指定输出结果为文本形式。readline
可以逐行读取shell窗口文本数据。
demo.py
import subprocess
cmds = ["cd ./path1", "cat ./test.py", "python ./test.py "]
# 创建一个子进程
process = subprocess.Popen(cmds[0], shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
text=True)
# 依次执行命令
for cmd in cmds[1:]:
# 向子进程发送命令
process.stdin.write(cmd + "\n")
process.stdin.flush()
# 逐行读取子进程的输出
while True:
output = process.stdout.readline()
if output == '' and process.poll() is not None:
break
if output:
print(output.strip())
# 检查是否有错误输出
error = process.stderr.read()
if error:
print(error.strip())