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

私の問題に対する2つの解決策を見つけました。

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番目の解決策に従いました。

2.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 に答える