Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用subprocess.Popen()时,stderr和stdout没有输出_Python_Svn_Subprocess - Fatal编程技术网

Python 使用subprocess.Popen()时,stderr和stdout没有输出

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

我正在使用Python自动执行SVN提交,我想将SVN命令的输出写入日志文件。我拥有的代码可以使SVN运行,但问题是在成功提交时,
子流程
调用不会为我的日志返回任何输出

相比之下,当我手动运行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()