Python 试图绕过pysvn,我可以使用subprocess函数在shell脚本中编写svn调用吗?
我在理解Python2.7中的子流程函数时遇到了一些问题。我尝试将shell脚本中的一些命令转换为Python,例如,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
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仍然很有帮助。