Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 25-10-2016 11:45:19

Xunil
Membre
Distrib. : Debian GNU/Linux 7.6 - Wheezy
Noyau : 3.10.23
Inscription : 19-03-2016

[Résolu] Commande bash dans Python

Bonjour,

Je souhaiterais récupérer le contenu de la commande date dans Python, j'ai testé plusieurs méthodes mais ma variable maDate reste désespérément vide...

Voici mon code :

#!/usr/bin/env python3.5
# coding: utf-8
 
import os           # import librairie permettant de lancer des cmd system
 
maDate = os.system("date +%A-%d-%B-%Y")

text = "Nous somme le "+str(maDate)+", c'est pour demain ! "
 
print(text)


La première ligne c'est la commande qui s'éxécute, la deuxième c'est le print() mais qui me renvoie une date de zéro

mardi-25-octobre-2016
Nous somme le 0, c'est pour demain !


Je n'arrive pas à stocker dans la variable ce que que renvoie la commande date hmm

Une idée ?

Merci smile

Dernière modification par Xunil (31-10-2016 19:40:35)

Hors ligne

#2 25-10-2016 12:48:07

enicar
Membre
Lieu : Grenoble
Distrib. : debian/sid
Noyau : Linux 4.8.10
(G)UI : openbox
Inscription : 26-08-2010

Re : [Résolu] Commande bash dans Python

Pour lire la sortie standard d'une commande depuis un autre programme on utilise
un tube (pipe). Je ne sais pas comment on fait en python. Cela est possible
avec le module subprocess :
https://docs.python.org/3/library/subprocess.html
Voir notamment subprocess.Popen.

Aussi, je me demande s'il ne serait pas plus judicieux de demander la date
directement en python avec le module time :
https://docs.python.org/3/library/time.html#module-time

Dernière modification par enicar (25-10-2016 13:07:19)


La machine, c'est dépassé ! On va tout remplacer par des humains big_smile

Hors ligne

#3 25-10-2016 19:28:08

Lancelot du Lac
Membre
Lieu : France
Distrib. : Jessie | Stretch
Noyau : Linux 3.16.0-4-amd64 | 4.5.0-1-amd64
(G)UI : ZSH / LXDE, Openbox | KDE
Inscription : 22-02-2016

Re : [Résolu] Commande bash dans Python

Le zéro doit venir de ce que le module os renvoie 0 puisque l'instruction s'est bien déroulée. J'ai testé une autre instruction fautive, qui me renvoie 256. C'est donc le code de bon déroulement (ou non) qui est renvoyé.
Pour récupérer le contenu, il faut procéder ainsi :


>>>maDate=os.popen("date +%A-%d-%B-%Y")
>>>maDate.read()
'mardi-25-octobre-2016\n'
 


En revanche, print(maDate.read()) ne fonctionnera pas.
Je suis de l'avis d'enicar : il vaudrait mieux utiliser un module propre à python, comme time, ou datetime :

import datetime
datetime.date.today()


Ce n'est qu'un exemple, il y a d'autres possibilités.


Dell Inspiron 7500 series - Debian Stretch - KDE/openbox - ZSH
Samsung - Debian Jessie - LXDE/pas de graphique - ZSH

Hors ligne

#4 26-10-2016 10:10:06

Thuban
Modérateur
Distrib. : OpenBSD
Noyau : current
(G)UI : xfce ou dwm
Inscription : 09-01-2009
Site Web

Re : [Résolu] Commande bash dans Python

bonjour,


import time
maDate = time.strftime("%A-%d-%B-%Y")


YA3HGA-H

Hors ligne

#5 26-10-2016 10:42:31

enicar
Membre
Lieu : Grenoble
Distrib. : debian/sid
Noyau : Linux 4.8.10
(G)UI : openbox
Inscription : 26-08-2010

Re : [Résolu] Commande bash dans Python

Puisque, on en est à citer des exemples de code, voici un exemple qui
permet d'extraire la chaîne depuis la commande externe date.
Dans le cas présent, ce n'est pas la bonne façon de faire (voir
l'exemple de Thuban), mais ça peut servir de base pour récupérer la
sortie d'une autre commande :


import os
# ici tube se comporte comme un fichier que l'on a ouvert avec os.open
tube = os.popen('date +%A-%d-%B-%Y')
# on récupère la première ligne :
temp = tube.read()
# on retire le dernier caractère qui est un « retour à la ligne ».
maDate=temp[:-1]
# on vérifie :
print(maDate)
 



Donc on peut récupérer la sortie d'une commande qui fait plusieurs
lignes en bouclant sur avec un for sur le tube comme on
le fait pour un autre fichier. Il faut juste penser à supprimer
les caractères de fin de lignes pour chaque ligne.

Un exemple dans un fichier que j'ai appelé essai.py


#! /usr/bin/python3
# -*- coding: UTF-8 -*-

import os

tube=os.popen('cat essai.py')
for l in tube:
    ligne=l[:-1]
    print(ligne)

 



ADDENDUM : évidemment ceci n'est qu'un exemple, et il ne faut jamais faire comme cela ;
il n'y pas besoin de cat pour lire le contenu d'un fichier en python big_smile

Dernière modification par enicar (26-10-2016 11:41:31)


La machine, c'est dépassé ! On va tout remplacer par des humains big_smile

Hors ligne

#6 31-10-2016 19:40:06

Xunil
Membre
Distrib. : Debian GNU/Linux 7.6 - Wheezy
Noyau : 3.10.23
Inscription : 19-03-2016

Re : [Résolu] Commande bash dans Python

Un grand merci pour vos réponses,
elles m'ont permises de faire plusieurs essais / tests et ça fonctionne, je n'ai que l'embarra du choix !

Merci ! smile

Dernière modification par Xunil (31-10-2016 19:40:19)

Hors ligne

#7 01-11-2016 13:02:42

greenmerlin
Membre
Lieu : 127.0.0.1
Distrib. : Archlinux/TinycoreLinux(CorePure 64-6.4.1)/Jessie
Noyau : 4.2.2-1 / 4.4
(G)UI : wmaker
Inscription : 23-01-2016

Re : [Résolu] Commande bash dans Python

Bonjour,

n'oubliez pas que si vous ne placez pas le sujet en résolu

Bendia > https://debian-facile.org/profile.php?id=2534
et
Smolski > https://debian-facile.org/profile.php?id=716

ne seront pas payé ce mois-ci

un petit geste pour les manchots qui vivent dans ses forums smile

" La plus importante et la plus négligée de toutes les conversations, c'est l'entretien avec soi-même. "
Chancelier Oxenstiern.

536920766f7573206172726976657220c3a0206c69726520c3a7612c20632765737420717565206e6f757320706172746167656f6e73206c6573206dc3aa6d65732063656e747265732064e28099696e74c3a972c3aa74732e

Hors ligne

Pied de page des forums