1

我正在使用 python 脚本自动创建项目。我可以在 python 中创建存储库、签出、提交和导入目录。

它似乎不会做的是设置svn:externals属性。我可以从命令行设置它,但是当我尝试使用 a 运行命令时subprocess.call它不起作用。

这是命令行(在签出的项目目录中有效):

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

这是脚本调用(在检查 repo 后运行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
  • 视窗服务器 2003
  • 视觉SVN
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/" . ')

应该“作为 shell”运行,你只是无法从中获得反馈 - 它会运行命令并等待命令完成。

那,或者您可以尝试分解命令(不是 100% 确定这是否适用于 Windows,但非常确定):

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 参数之一。双引号仅对 shell 具有特殊含义。

例子:

>>> 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 回答