- 主题:用subprocess.run()/popen()等等执行shell命令, 能不结束, 继续
有多条shell命令要执行, 想用python创建一个shell进程, 一条一条执行
不想用&&合并成一条, 一个是因为命令有点长, 一个是中间还要做一些判断
subprocess.run()和subprocess.popen()都是执行完shell进程就结束了, 有没有方法创建一个shell进程, 连续执行, 根据反馈stdout和stderr送新的命令, 最后全部执行完再给信号结束?
我知道这可以用sh脚本了, 但python毕竟更方便. 谢谢!
--
FROM 122.96.47.*
cd到一个目录, 执行N多条"cp -r --parents"的目录选择复制
后者的cp命令必须在特定目录中执行, 又要执行N多条, 合成一条命令"cd xxx && cp ... && cp ... && cp ..."感觉不好
用一系列的
subprocess.run( "cd xxx && cp ... ")
subprocess.run( "cd xxx && cp ... ")
subprocess.run( "cd xxx && cp ... ")
感觉也不好
【 在 flw 的大作中提到: 】
: 你这么做的目的是什么
:
--
FROM 124.71.94.*
这就是我想做的,但popen2已经被废弃了,官方文档里说替代的是subprocess.popen()
我用了官方的
p = Popen(cmd, shell=True, bufsize=bufsize,
stdin=PIPE, stdout=PIPE, close_fds=True)
(child_stdin, child_stdout) = (p.stdin, p.stdout)
但我试下来,如果cmd给的是'pwd'这样的指令,执行完进程就结束了(p.poll()结果为0)
如果cmd给的是'/bin/bash'这样的指令,执行child_stdin.write(b'pwd')不能把输入送给进程,只能调用p.communicate(),但调用完communicate进程也就结束了
就没有一个方法能开一个bash子进程, 并持续的喂命令,读输出吗?
【 在 Madlee 的大作中提到: 】
: popen2开一个bash,然后一行行喂命令。根据命令的输出决定下一次的输入。
--
FROM 124.71.94.*
这个例子是因为执行的ffmpeg是一个不会自己结束的进程,等待stdin输入'q'
并不能接受第二次命令
【 在 iMx 的大作中提到: 】
: #coding:utf-8
: import time
: import os
: ...................
--
FROM 124.71.94.*
可是我测的结论是如果不用communicate()的话 stdin.write的写入命令不会被送给进程,用stdout.read()读不到任何东西
- 来自 水木社区APP v3.5.4
【 在 Madlee 的大作中提到: 】
对,你不能用communiate之类的函数,必须自己用Popen的stdin/stdout属性读写并处理。基本就是这样:
- 来自 水木社区APP v3.5.4
--
FROM 112.65.48.*