我是Python的新手。我正在尝试自动化修补活动。
期望是从SVN签出文件并对其进行修补。首先,用户将输入URL,第二个输入将是存储库中的文件名。我想将文件导出到我的localsystem。我有这样的代码,
import os
urlpath =input('Enter the URL')
Filename =input('Enter the filename with Extension')
os.system("svn export 'urlpath'+'/'+'Filename'")
输入:https://svn.abcdf.xyz文件名:utility.java
代码应该从https://svn.abcdf.xyz/utility.java导出文件。
有没有其他方法可以做到这一点?或者如何组合两个不同的变量,这些变量应该由os.system分隔。
正如评论中已经指出的那样,os.system
的论点只是一个字符串;所以你要使用Python的常规字符串格式化功能来创建它。
import os
urlpath = input('Enter the URL')
filename = input('Enter the filename with extension')
os.system("svn export '{0}/{1}'".format(urlpath, filename))
但是,您可能应该更喜欢在subprocess.run
文档中强烈暗示的os.system
。
import subprocess
urlpath = input('Enter the URL')
filename = input('Enter the filename with extension')
subprocess.run(['svn', 'export', urlpath+'/'+filename],
check=True)
使用check=True
,如果命令失败,你会得到一个明确的错误(os.system
只会告诉你通过你没有检查的退出状态),而且因为我们不使用shell=True
,所以这应该快一点。还要注意第一个参数是一个标记列表,而不是一个shell必须再次分开的字符串(记住,现在这里没有shell)。
subprocess.run()
是在Python 3.5中引入的;如果你需要支持旧版本,可以探索用subprocess.check_call()
替换它
一个更好的设计将摆脱交互式input
调用,并允许用户传入参数作为命令行参数(sys.argv
);这样,您就可以使用shell的历史记录和文件名完成功能,因此您无需手动完整地键入文件名,并且可以轻松调用最近使用过的文件。这也使得围绕脚本构建额外的自动化成为可能,因为程序可以轻松地驱动其他程序。
import sys
import subprocess
import logging
if len(sys.argv) != 3:
logging.error('syntax: {0} baseurl filename'.format(
sys.argv[0].split('/')[-1}))
sys.exit(2)
urlpath = sys.argv[1]
filename = sys.argv[2]
subprocess.run(['svn', 'export', urlpath+'/'+filename],
check=True)