4

我是 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有没有办法做到这一点?

请帮我解决这个问题。谢谢

4

3 回答 3

1

我想这不是标题中问题的答案,但是您是否尝试svn过运行--non-interactive --trust-server-cert?这不是你想要的吗?

于 2012-11-22T12:15:04.143 回答
1

您收到的消息看起来与我的证书有关。因此,与其增加将输入传递给命令的复杂性,不如修复证书问题或将标志--trust-server-cert传递给 SVN 命令。

res = subprocess.check_output(["svn.exe", "--trust-server-cert", "list", "url"], stderr=subprocess.STDOUT)
于 2012-11-22T12:15:34.313 回答
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

谢谢。

于 2012-11-28T12:53:38.843 回答