1

Pythonスクリプトを使用してプロジェクトの作成を自動化しています。リポジトリ、チェックアウト、コミット、およびインポート ディレクトリをすべて Python 内から作成できます。

それがしないように見えるのは、svn:externalsプロパティを設定することです。これはコマンドラインから設定できますが、コマンドを実行しようとするsubprocess.callと機能しません。

コマンド ラインは次のとおりです (チェックアウトされたプロジェクト ディレクトリにある場合に機能します)。

svn propset svn:externals "trunk/Source/Interactive/Flash.Externals https://server/svn/proj/" . 

スクリプト呼び出しは次のとおりです (リポジトリを にチェックアウトした後に実行されますgv.project_repo_dir)。

# gv is a global variables object
odir = getcwd()
chdir(getcwd() + '/' + gv.project_repo_dir)
res = call(['svn', 'propset', 'svn:externals',                                                \
            '"'+ gv.interactive_subpath +'Flash.Externals '+ gv.mirror_project_repo_url +'"', \
            '.'])
chdir(odir)

スクリプトの実行によるエラーは次のとおりです。

svn: Error parsing svn:externals property on '.': '"trunk/Source/Interactive/Flash.Externals https://server/svn/proj/"'

私はこれをshell=True引数として、callおよびなしで試しました。サイコロはありません。

何か案は?

統計:

  • パイソン 2.7
  • Windows Server 2003
  • VisualSVN
4

2 に答える 2

1

コマンドラインから行うのではなく、pysvn モジュールを確認することをお勧めします。

http://pysvn.tigris.org/

しかし、コマンドラインから実行する必要がある場合、サブプロセスの代わりに os.system 呼び出しを使用できますか?

os.system('svn propset svn:externals "trunk/Source/Interactive/Flash.Externals https://server/svn/proj/" . ')

「シェルとして」実行する必要がありますが、そこからフィードバックを取得することはできません。コマンドを実行し、コマンドが終了するまで待機します。

または、コマンドを分割してみることができます (これが Windows で機能するかどうかは 100% 確実ではありませんが、かなり確実です)。

import shlex
commands = shlex.split('svn propset svn:externals "trunk/Source/Interactive/Flash.Externals https://server/svn/proj/" .')
subprocess.call(commands)
于 2012-08-02T22:25:53.680 に答える
0

「shell=True では動作しない」ステートメントを購入するかどうかはわかりません。"trunk/Source/Interactive/Flash.Externals https://server/svn/proj/"エラーは、execvp 引数の 1 つとして使用しようとしているように、二重引用符をリテラルとして解釈したことを示しています。二重引用符は、シェルに対してのみ特別な意味を持ちます。

例:

>>> subprocess.call(["ls", '"."'], shell=False)
ls: ".": No such file or directory
2

shell=True の場合:

>>> subprocess.call(["ls", '"."'], shell=True)
metrics_poller.sock  OSL_PIPE_0_SingleOfficeIPC_b919ef148f655fcebc4bf633c062a098  sv9hg.tmp
metrics.sock         proc_mgr_stats                                               userinstall.mBa793
mysql_tzinfo_stderr  sess_716518f985ab8de017981347a8b61c611c9880bd                userinstall.omY802

shell=True バリエーションが本当に役に立たない場合は、二重引用符を削除してみてください。

res = call(['svn', 'propset', 'svn:externals',                                                \
            gv.interactive_subpath +'Flash.Externals '+ gv.mirror_project_repo_url, \
            '.'])
于 2012-08-02T21:20:26.203 に答える