我是Python新手。我对以下问题感到兴奋。
我使用python脚本中的subprocess.check_output调用了一个exe。
res = subprocess.check_output(["svn.exe", "list", "Https://127.0.0.1:443/svn/Repos"], stderr=subprocess.STDOUT)
在命令提示符下执行脚本时,我收到一条输入输入的提示信息,
(R)eject, accept (t)emporarily or accept (p)ermanently?
但是当我从批处理文件执行脚本时,我没有收到此消息,默认情况下,调用check_output
失败。
有没有办法在调用subprocess.check_output
时传递输入,以便我可以批量运行脚本。
嗨,我正在更新我的问题: 我尝试使用以下命令从命令提示符运行svn,
echo t | svn.exe list Https://127.0.0.1:443/svn/Repos
我没有任何用户输入就得到了输出。
但我无法通过echo t |
中的subprocess.check_output
。
有没有办法做到这一点?
请帮我解决这个问题。 感谢
答案 0 :(得分:1)
我想这不是标题中问题的答案,但您是否尝试使用svn
运行--non-interactive --trust-server-cert
?这不是你想要的吗?
答案 1 :(得分:1)
您收到的消息看起来与证书有关。因此,不是添加传递输入到命令的复杂性,而是修复证书问题或将the --trust-server-cert
flag传递给SVN命令。
res = subprocess.check_output(["svn.exe", "--trust-server-cert", "list", "url"], stderr=subprocess.STDOUT)
答案 2 :(得分:0)
我为我的问题找到了两个解决方案,
1.从这个链接http://desipenguin.com/techblog/2009/01/13/fun-with-python-subprocessstdin/
发现这个灵魂proc = subprocess.Popen((["svn.exe", "list", "Https://127.0.0.1:443/svn/Repos"], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
print proc.communicate(‘t\n’)[0]
这解决了为流程提供关键输入't'。但我无法读取输出。所以,我遵循了第二个解决方案。
2.使用两个子流程:
p = subprocess.Popen("echo t |", shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
p1 = subprocess.Popen(["svn.exe", "list", "Https://127.0.0.1:443/svn/Repos"], shell=True, **stdin=p.stdout**, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
output = p1[0]
此处,过程1的输出作为过程2的输入给出。因此,这等于echo t | svnmucc mkdir d:\temp
。
感谢。