2017-01-23 4 views
0

Windowsコマンドプロンプトを使用して実行可能なコマンドラインインターフェイスコマンドはほとんどありません。コマンドプロンプトを使用してCVSリポジトリからファイルを読み込みます。次に、これらのコマンドをPythonスクリプトで実行します。私は、サブプロセスinorderを使用して、コマンドプロンプトとPythonスクリプトの対話をする必要があることを知りました。これらのコマンドをコマンドプロンプトから直接実行しようとすると、正しく実行されます。ローカルのワークスペースを作成し、ファイルを適切に取得することがわかります。しかし、私が実行すると私はあなたの助けが必要です。私はまた、タグを使ってファイルを取得したいと思います。Windowsを実行してCVSリポジトリからファイルを取り出すコマンドラインをPythonスクリプトからユーザ指定の入力に基づいて実行

import os 
import sys 
import subprocess 

Current_Working_Directory=os.getcwd() 
print "Current_Working_Directory",Current_Working_Directory 

cmd = ['cvs', 
    '-d:::pserver:<username>@<computername>:<repository> 
    'login'] 
p = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE) 
output=p.communicate() 
print "p",p 
cmd1=['set','CVSROOT','=','pserver:<username>@<computername>:<repository>'] 
p1 = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE) 
print p1 
cmd2=['cvs','co','-r','HEAD','Test'] 
p2 = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE) 
print p2 

答えて

0

subprocess.Popenを実行すると、新しいサブプロセスが作成されます。 CVSROOT環境変数は、そのサブプロセスの短い存在のためだけに存在するので、cvsコマンドを実行する次のPopenの周りには存在しません。代わりにos.environ["CVSROOT"] = 'pserver:<username>@<computername>:<repository>'を実行したいとします。

cvs loginの前にそれを行う場合は、そのコマンドで明示的に指定する必要はありません。

cvs loginコマンドの場合と同様に、cvs coコマンドでcvsrootを-dと指定することもできます。

+0

実際に上記のコードを実行しようとすると、CVSリポジトリからファイルが取得されませんが、コマンドプロンプトでこれらのコマンドを実行しようとすると、ファイルが適切に抽出され、ローカルワークスペースにファイルが表示されます。 Pythonスクリプトを使用してファイルを取得するにはどうすればよいですか? – user1681102

+0

問題をデバッグするために何をしましたか? CVSはどのような出力をしていますか? – Mort

+0

私は今、私のアプローチを変更しました。コマンドラインインターフェイスを直接実行する代わりにpython script.Iを使って、CVSリポジトリからファイルを取得するすべてのコマンドを持つバッチファイルを作成しました。このpythonスクリプトからこのbatファイルを呼び出しようとしています。私のために働いた! – user1681102

関連する問題