J'ai une question. J'ai vraiment essayé d'apprendre Python. Pour un projet, je souhaite créer une interface graphique ncurses pour mon serveur de sauvegarde. Mon serveur de sauvegarde exécute rdiff-backup, et je veux avoir les ncurses prennent en noms de variables et de les brancher dans mon script. J'ai essayé de faire beaucoup de lecture, donc je ne pose pas de questions stupides.script Python pour Linux commandes
Voici ma fonction pour exécuter le script:
def runScript():
# Cannot concatenate 'str' and 'list' objects
#script = rdiff + rdiffArgs
script = rdiff + ' ' + rdiffVerbosity + ' ' + rdiffStatistics \
+ ' ' + clientName + '@' + clientHost + '::' + clientDir \
+ ' ' + serverDir
os.system(script)
Ce que je pensé à l'origine serait bien était d'ajouter toutes les variables dans une liste, donc je pouvais courir dire
script = rdiff + rdiffArgs
Y a-t-il une meilleure façon de le faire sans toute la concaténation d'espace?
Merci pour votre aide
EDIT: Permettez-moi à ce jour posterai le script entier. Je n'étais pas très clair et je vous remercie de votre aide et la patience
#!/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
Je ne sais pas exactement ce que votre question est, mais je crois comprendre que vous voulez rdiffArgs être une liste de chaînes, et ajouter le littéral 'rdiff' à l'avant de cela? Je pense que vous cherchez: script = [rdiff] + rdiffArgs Ou '' .join ([rdiff] + rdiffArgs) si vous le voulez comme une chaîne. – abeyer
Cela aboutirait à une liste. Le demandeur souhaite probablement la chaîne résultante car c'est ce qui est fourni à os.system(). –
'os.system() 'ne devrait pas être utilisé, donc toute réponse qui permet ceci devrait être considérée comme incorrecte. –