Python 试图绕过pysvn,我可以使用subprocess函数在shell脚本中编写svn调用吗?

Python 试图绕过pysvn,我可以使用subprocess函数在shell脚本中编写svn调用吗?,python,bash,svn,subprocess,Python,Bash,Svn,Subprocess,我在理解Python2.7中的子流程函数时遇到了一些问题。我尝试将shell脚本中的一些命令转换为Python,例如,svn export-r5…,但我不想依赖于pysvn这样的库来完成这项工作。解决这个问题的方法(据我所知)是使用一个子流程,只运行shell脚本中的每个命令。这应该通过子流程调用(“svn导出-r 5”,shell=True)”来实现吗?或者Popen是我应该看的吗?我知道有人说你应该避免shell=True,但在我的案例中没有安全问题或可能的用户错误。任何建议都将不胜感激。s

我在理解Python2.7中的子流程函数时遇到了一些问题。我尝试将shell脚本中的一些命令转换为Python,例如,
svn export-r5…
,但我不想依赖于
pysvn
这样的库来完成这项工作。解决这个问题的方法(据我所知)是使用一个子流程,只运行shell脚本中的每个命令。这应该通过
子流程调用(“svn导出-r 5”,shell=True)”来实现吗?或者
Popen
是我应该看的吗?我知道有人说你应该避免
shell=True
,但在我的案例中没有安全问题或可能的用户错误。任何建议都将不胜感激。

subprocess.call
只是
subprocess.Popen
的一个薄包装,它等待流程完成:

def call(*args, **kwargs):
    return Popen(*args, **kwargs).wait()
使用shell来运行命令的唯一原因是,如果您想运行一些或多或少复杂的shell命令。对于单个简单命令及其参数,最好传递一个由命令名及其参数组成的字符串列表

subprocess.call(["svn", "export", "-r", "5"])
例如,如果您正在编写一个可以将修订号作为参数的函数,则可以将其传递给
svn export
,只要您确保它是一个字符串:

def svn_export(r):
    subprocess.call(["svn", "export", "-r", str(r)])

不要使用
pysvn
。使用SWIG-Python绑定:我试图避免下载任何库,这就是我使用子流程的原因,但是记下SWIG仍然很有帮助。