subprocess上传svn修改,多次实时捕获输出命令并针对输出内容给出不同输入内容
时间: 2023-12-23 16:03:26 浏览: 24
可以使用Python的subprocess模块来实现上传svn修改和捕获命令输出的功能。同时,可以使用正则表达式来匹配命令输出,并根据输出内容给出不同的输入内容。
具体实现步骤如下:
1. 使用subprocess模块执行svn命令,通过设置stdout和stderr参数为subprocess.PIPE来捕获命令输出。
```python
import subprocess
p = subprocess.Popen(['svn', 'commit', '-m', 'commit message'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
```
2. 循环读取命令输出,同时使用正则表达式匹配输出内容。
```python
import re
while True:
output = p.stdout.readline()
if not output and p.poll() is not None:
break
if output:
match = re.search(r'Successfully committed revision (\d+)\.', output.decode())
if match:
revision = match.group(1)
# 根据输出内容给出不同的输入内容
if revision == '123':
p.stdin.write('input1\n')
else:
p.stdin.write('input2\n')
```
3. 如果命令执行完毕,退出循环。
```python
p.stdin.close()
p.wait()
```
完整代码示例:
```python
import subprocess
import re
p = subprocess.Popen(['svn', 'commit', '-m', 'commit message'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
while True:
output = p.stdout.readline()
if not output and p.poll() is not None:
break
if output:
match = re.search(r'Successfully committed revision (\d+)\.', output.decode())
if match:
revision = match.group(1)
if revision == '123':
p.stdin.write('input1\n')
else:
p.stdin.write('input2\n')
p.stdin.close()
p.wait()
```