У меня вопрос. Я действительно пытался узнать Python. Для проекта я хочу создать графический интерфейс ncurses для моего резервного сервера. Мой резервный сервер запускает rdiff-backup, и я хочу, чтобы ncurses принимали имена переменных и вставляли их в свой скрипт. Я пытался сделать много чтения, поэтому я не задаю глупых вопросов.Scripting Python для команд Linux
Вот моя функция для запуска скрипта:
def runScript():
# Cannot concatenate 'str' and 'list' objects
#script = rdiff + rdiffArgs
script = rdiff + ' ' + rdiffVerbosity + ' ' + rdiffStatistics \
+ ' ' + clientName + '@' + clientHost + '::' + clientDir \
+ ' ' + serverDir
os.system(script)
То, что я первоначально думал, будет аккуратным, чтобы добавить все переменные в список, так что я мог бы просто запустить сказать
script = rdiff + rdiffArgs
Есть ли лучший способ сделать это без всякой конкатенации пространства?
Спасибо за вашу помощь
EDIT: Позвольте мне опубликовать весь сценарий до сих пор. Я был не очень понятно, и я очень ценю вашу помощь и терпение
#!/usr/bin/env python
import os
import smtplib
# Global variables
rdiff = '/usr/bin/rdiff-backup'
rdiffVerbosity = '-v5'
rdiffStatistics = '--print-statistics'
emailSmtp = 'smtp.gmail.com'
smtpPort = '465'
emailUsername = 'reports'
emailPassword = '3kc9dl'
emailTo = '[email protected]'
emailFrom = '[email protected]'
serverName = 'root'
serverHost = 'SV-Datasafe'
serverDir = '/srv/backup/SV-Samba01'
clientName = 'root'
clientHost = 'SV-Samba01'
clientDir = '/srv'
rdiffArgs = rdiffArgs = [rdiffVerbosity, rdiffStatistics, \
clientName + '@' + clientHost + '::' \
+clientDir + ' ' + serverDir]
time = ''
dateStamp = datetime.now()
def sendEmail():
subject = dateStamp + clientName
body = clientDir + ' on ' + clientHost + ' backed up to ' + serverName + \
' in the directory ' + serverDir + ' on ' + dateStamp
message = """\
From: %s
To: %s
Subject: %s
%s
""" % (emailFrom, emailTo, subject, body)
deliverEmail = smtplib.SMTP(emailSmtp, port=smtpPort)
deliverEmail.login(emailUsername, emailPassword)
def runScript():
# Cannot concatenate 'str' and 'list' objects
#script = rdiff + rdiffArgs
script = rdiff + ' ' + rdiffVerbosity + ' ' + rdiffStatistics \
+ ' ' + clientName + '@' + clientHost + '::' + clientDir \
+ ' ' + serverDir
os.system(script)
# TODO:: Logging
Не уверен, что именно то, что ваш вопрос, но из моего понимания вы хотите rdiffArgs быть список строк, а также добавить буквальное «rdiff» на передний план? Я думаю, что вы ищете: script = [rdiff] + rdiffArgs Или '.join ([rdiff] + rdiffArgs), если вы хотите, чтобы это была строка. – abeyer
Это приведет к списку. Вероятно, искатель хочет получить результирующую строку, потому что это то, что было передано в os.system(). –
'os.system() 'не следует использовать, поэтому любой ответ, который позволяет это, следует считать неправильным. –