在 python 中的 os.system 子进程中合并两个 URL
Merge two URLs inside a os.system subrprocess in python
我是 Python 的新手。我正在尝试自动修补 activity。
预期是从 SVN 检出文件并对其进行修补。首先,用户将输入 url,第二个输入将是存储库中的文件名。我想将文件导出到我的本地系统。我有这样的代码,
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)
我是 Python 的新手。我正在尝试自动修补 activity。
预期是从 SVN 检出文件并对其进行修补。首先,用户将输入 url,第二个输入将是存储库中的文件名。我想将文件导出到我的本地系统。我有这样的代码,
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)