Как уже указывалось в комментариях, аргумент 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
, это должно быть крошечнымнемного быстрееОбратите также внимание на то, что первый аргумент - это список токенов, а не строка, которую оболочка должна снова выделить (помните, что здесь сейчас нет оболочки).
subprocess.run()
была введена в Python 3.5;если вам нужно поддерживать более старые версии, возможно, стоит попробовать заменить его на subprocess.check_call()
Гораздо лучший дизайн избавил бы от интерактивных вызовов input
и позволил бы пользователю передавать параметры в качестве аргументов командной строки (sys.argv
);Таким образом, вы получаете возможность использовать функции оболочки истории и дополнения имени файла, поэтому вам не нужно вводить имена файлов полностью вручную, и вы можете легко вызывать файлы, которые вы недавно использовали.Это также делает возможным создание дополнительной автоматизации вокруг вашего сценария, потому что тогда программы могут легко управлять другими программами.
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)