lancer un script batch dans python

a marqué ce sujet comme résolu.

Bonjour, j’ai une petite question, j’aimerais executer un script batch stocker dans mon code python sous forme d’une chaine de caractere. en gros j’ai un truc comme ceci :

1
2
mon_script="#!/bin/sh
hostname"

je voudrais l’executer (avec subprocess ?)

j’ai regardé la doc de subprocess mais je vois pas comment faire, je peut faire un subprocess d’une commande

1
p = subprocess.Popen("hostname", stdout=subprocess.PIPE, shell=True)

mais moi je veut pouvoir le faire un script complet, j’ai mis un exemple tous bete mais je vais vous en donner un plus complexe :

1
2
3
4
5
6
7
8
monscript="#!/bin/sh
while [ ! -f /etc/hostname ]
do
  sleep 2
done
hostname"

`

je veut qu’il soit dans mon code python car ce script je peut pouvoir le modifier (sans devoir m’embêter à le sauvegarder/modifier dans un fichier sh)

+0 -0

Salut,

Alors en effet cela va se passer au niveau du shell=True, qui permet de demander à Python d’exécuter ta commande au sein d’un shell, et donc de faire interpréter les commandes sh.

Voici un exemple qui fonctionnerait comme tu le veux :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import subprocess

script = '''#!/bin/sh                                                                                                                                                                                                                       
while [ ! -f /etc/hostname ]                                                                                                                                                                                                                
do                                                                                                                                                                                                                                          
  sleep 2                                                                                                                                                                                                                                   
done                                                                                                                                                                                                                                        
hostname'''

subprocess.run(script, shell=True)
# Ou subprocess.Popen(script, shell=True) sur les versions de Python plus anciennes

J’ai beaucoup de mal à comprendre pourquoi tu veux que python te génère du bash plutôt que faire directement le travail.

Je ne vois pas du tout l’utilité de faire ça (enfin, j’arrive à imaginer un cas où ça se justifierait, mais il est assez marginal).

+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte