Python 使用subprocess.Popen()时,stderr和stdout没有输出
我正在使用Python自动执行SVN提交,我想将SVN命令的输出写入日志文件。我拥有的代码可以使SVN运行,但问题是在成功提交时,Python 使用subprocess.Popen()时,stderr和stdout没有输出,python,svn,subprocess,Python,Svn,Subprocess,我正在使用Python自动执行SVN提交,我想将SVN命令的输出写入日志文件。我拥有的代码可以使SVN运行,但问题是在成功提交时,子流程调用不会为我的日志返回任何输出 相比之下,当我手动运行SVN时,我会得到显示命令进度和提交文件的输出。这就是我想要的日志文件。SVN是否将该数据输出到比stdout或stderr更大的缓冲区?如何为日志捕获该数据 以下是我使用的代码: cmd = "svn commit --non-interactive --no-auth-cache -m 'Automati
子流程
调用不会为我的日志返回任何输出
相比之下,当我手动运行SVN时,我会得到显示命令进度和提交文件的输出。这就是我想要的日志文件。SVN是否将该数据输出到比stdout或stderr更大的缓冲区?如何为日志捕获该数据
以下是我使用的代码:
cmd = "svn commit --non-interactive --no-auth-cache -m 'Automatic commit' ./"
process = subprocess.Popen(cmd,
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
universal_newlines=True)
result = process.wait()
# Output
out = process.stdout.read()
err = process.stderr.read()
当我运行此代码并且提交成功时,out
和err
变量都为空。在使用管道时不要使用wait()
。使用communicate()
从:
警告使用communicate()而不是.stdin.write、.stdout.read或 .stderr.read以避免由于任何其他操作系统管道而导致死锁 缓冲区填满并阻塞子进程
它在我的解决方案中起作用:
svn_commit_t = 'svn commit "%s" -m "ticket #%s automerge"' % (directory, tic)
svn_co = subprocess.Popen(svn_commit_t, shell=True, stdout=subprocess.PIPE,stderr=subprocess.PIPE, universal_newlines=True)
out, err = svn_co.communicate()
您如何发送登录凭据来执行此操作?我正在尝试相同的方法,但不知道如何发送相同的用户名和密码
svn_commit_t = 'svn commit "%s" -m "ticket #%s automerge"' % (directory, tic)
svn_co = subprocess.Popen(svn_commit_t, shell=True, stdout=subprocess.PIPE,stderr=subprocess.PIPE, universal_newlines=True)
out, err = svn_co.communicate()