Probleme python et wine

Bonjour,
Je débute avec python et j’aimerai faire un script qui exécute des commande shell pour lancé un jeu qui tourne avec wine .
J’ai donc un petit problème, quand j’utilise le module subprocess exécuté mes commandes il ne prend pas en compte les commande suivante.

import subprocess
subprocess.call ("wine cmd", shell=True)
subprocess.call ("cd /home/elouan/Documents/Programe/ConterStrike1.6/", shell=True)
subprocess.call ("start CS1.6.bat", shell=True)

et m’affiche:

 Wine CMD version 5.1.2600 (1.6.2)
    Z:\home\elouan\Documents>

svp vous pourait m’aider :grinning:

En fait, ton script est en train d’exécuter wine cmd. Tu veux faire quoi au juste ? Lancer start CS1.6.bat du dossier /home/elouan/Documents/Programe/ConterStrike1.6/ avec le programme wine cmd ?

oui c’est ça ! :grinning:

Tu peux changer de répertoire vers /home/elouan/Documents/Programe/ConterStrike1.6/ et lancer wine start CS1.6.bat à la place.

oui mais je doit executé la commande dans la cmd de wine

Aïe !

Sinon, tu peux tenter un truc du genre :

#!/usr/bin/env python3

from os import popen

wine_cmd = popen ('wine cmd', 'rw')
wine_cmd.write ('cd /home/elouan/Documents/Programe/ConterStrike1.6/\n')
wine_cmd.write ('start CS1.6.bat\n')

Si tu n’as pas Python 3, je pense que ce script est compatible Python 2.

merci pour ton aide :wink:
il m’a affiché le message d’erreur suivant

Traceback (most recent call last):
  File "./ScriptWinGames.py", line 33, in <module>
    wine_cmd = popen ('wine cmd', 'rw')
  File "/usr/lib/python3.4/os.py", line 935, in popen
    raise ValueError("invalid mode %r" % mode)
ValueError: invalid mode 'rw'

j’ai alors changé l’argument ‘rw’ par ‘w’ mais il ne m’exécute que

wine_cmd.write ('cd /home/elouan/Documents/Programe/ConterStrike1.6/\n')

et non

wine_cmd.write ('start CS1.6.bat\n')

Ah, oui, il faut trouver un moyen pour que le script python attendre la fermeture de wine cmd avant de se fermer. Je ne sais pas trop comment faire là…

C’est pas très propre, mais avec un petit sleep peut-être ?

(Aucun jeu de mots n’a été blessé pendant l’écriture de ce message)

1 J'aime

En effet, ton sleep n’est pas propre, mais ce n’est pas la question. La durée de l’attente doit correspondre à la durée de l’exécution de wine cmd. Après, tu peux faire un sleep d’une durée arbitraire de plusieurs mois (je ne te raconte pas l’odeur après) et l’interrompre dans le terminal quand tu as fini, mais le cahier des charges d’@Elouan ne précise pas si la commande sera lancée dans un terminal ou à l’aide d’un lanceur et si son pc est rédémarré de temps en temps.

1 J'aime

Je pense qu’en ajoutant un truc du genre :

for i in wine_cmd.readline ():
	print (i)
wine_cmd.close ()

à la fin du script, ça peut le faire.