2012-09-21 3 views
0

J'essaye de faire un manuscrit qui exécuterait un dossier .exe de mon ordinateur. Je pense que j'utilise la mauvaise commande. J'ai essayé toutes les autres commandes comme import os, os.startfile, mais elles ne fonctionnent pas.Comment exécuter un programme en Python.

Voici mon code:

loop=0 
while loop==0: 
    answer=raw_input("coded by: Narralol\n\n" 
    "Pick a task:\n" 
    "1) Start Minecraft.exe\n" 
    "2) Start Minecraft_Server.jar\n" 
    "3) Backup your server\n" 
    "4) Copy the backup to your desktop\n" 
    "5) Exit\n") 
    if answer==1: 
     execfile('D:\Games\Minecraft\Minecraft.exe') 
    elif answer==2: 
     execfile('D:\Games\Minecraft\Minecraft_server.jar') 
    elif answer==5: 
     loop=1 
+0

voir http://stackoverflow.com/q/12339671/1240268 –

+0

Merci, j'ai déjà. – Narraxus

+0

Vous pouvez éditer le titre :). J'ai ajouté le tag py2exe que je suppose que vous utilisez pour le faire. –

Répondre

1

Vous pouvez utiliser os.system() comme si (note: il est généralement préférable d'utiliser subprocess pour faire des choses comme ceci):

answer = 0 
while answer < 5: 
    answer = int(raw_input("coded by: Narralol\n\n" 
    "Pick a task:\n" 
    "1) Start Minecraft.exe\n" 
    "2) Start Minecraft_Server.jar\n" 
    "3) Backup your server\n" 
    "4) Copy the backup to your desktop\n" 
    "5) Exit\n").strip()) 
    if answer == 1: 
     os.system('D:\Games\Minecraft\Minecraft.exe') 
    elif answer == 2: 
     os.system('D:\Games\Minecraft\Minecraft_server.jar') 
    elif answer == 5: 
     break 

Modifié a quelques autres choses mineures dans le code comme vérifier un int contre un autre int (au lieu de chaîne contre un int), etc

+0

Ouais, merci beaucoup, ça marche :) Je pense que le problème était que la réponse était reconnue comme une chaîne plutôt que comme un int donc il n'exécutait pas le fichier. Il a juste continué à tourner en boucle sans rien faire. Peut-être que cela pourrait être l'erreur? – Narraxus

+0

C'est exact, c'est-à-dire: 'x =" 1 "; y = 1; x! = y; int (x) == y; x == str (y) ' – chown

+0

Oooooh oui je comprends maintenant :). Cela prend tout son sens! – Narraxus

3

Utilisez le subprocess module pour exécuter des commandes externes:

import subprocess 

    subprocess.call('D:\Games\Minecraft\Minecraft.exe') 
+1

os.system fonctionne très bien la plupart du temps aussi ... –

+2

@JoranBeasley: Même la documentation 'os.system' pointe vers' subprocess' comme méthode préférable; Premièrement, la méthode de gestion des arguments par défaut évite les vulnérabilités d'injection de shell. –

+1

ouais je sais ... mais il contrôle l'entrée et n'a pas besoin de la sortie ... alors dans ce cas, je dirais que os.system fonctionnerait bien ... mais le sous-processus est certainement le "bon" moyen de le faire –

Questions connexes