subprocess.popen上传svn时需要实时获取输出,并依据输出内容进行输入
时间: 2023-12-24 13:03:03 浏览: 133
你可以使用 `subprocess.Popen` 创建一个子进程来执行 SVN 命令,并使用 `communicate()` 方法来获取命令的输出结果。以下是一个示例代码:
```python
import subprocess
# 创建子进程执行 SVN 命令
proc = subprocess.Popen(['svn', 'commit'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# 读取命令输出并实时处理
while True:
output = proc.stdout.readline().decode('utf-8')
if output == '' and proc.poll() is not None:
break
if output:
print(output.strip())
# 根据输出内容进行输入
if 'Username' in output:
proc.stdin.write('your_username\n'.encode('utf-8'))
elif 'Password' in output:
proc.stdin.write('your_password\n'.encode('utf-8'))
# 等待子进程结束
proc.communicate()
```
在上面的示例中,我们使用 `proc.stdout.readline()` 实时获取命令输出,并使用 `strip()` 方法去掉换行符。然后根据输出内容判断是否需要输入用户名和密码,并使用 `proc.stdin.write()` 方法将用户名和密码写入子进程的标准输入流中。最后使用 `proc.communicate()` 等待子进程结束。
阅读全文