2009-07-06 12 views
3

Lorsque ce fichier .exe exécute imprime un écran plein d'informations et je veux imprimer une ligne particulière sur l'écran, ici en ligne « 6 »:Comment imprimer une sortie avec python?

cmd = ' -a ' + str(a) + ' -b ' + str(b) + str(Output) 
    process = Popen(cmd, shell=True, stderr=STDOUT, stdout=PIPE) 
    outputstring = process.communicate()[0] 
    outputlist = outputstring.splitlines() 
    Output = outputlist[5] 
    print cmd 

Cela fonctionne très bien: cmd = ' -a ' + str(a) + ' -b ' + str(b)

Cela ne fonctionne pas: cmd = ' -a ' + str(a) + ' -b ' + str(b) + str(Output)

Je reçois une erreur disant Output n'est pas défini. Mais quand je coupe et colle:

outputstring = process.communicate()[0] 
    outputlist = outputstring.splitlines() 
    Output = outputlist[5] 

avant l'instruction cmd il me dit que le processus n'est pas défini. str(Output) devrait être ce qui est imprimé sur la ligne 6 lorsque le fichier .exe est exécuté.

Répondre

0

Comme vous l'avez dit, une variable doit être déclarée avant de pouvoir l'utiliser. Par conséquent lorsque vous appelez str(Output) CI-DESSUS Output = outputlist[5], la sortie n'existe pas encore. Vous avez besoin de l'appeler en fait d'abord:

cmd = ' -a ' + str(a) + ' -b ' + str(b) 

alors vous pouvez imprimer la sortie de cette commande:

cmd_return = ' -a ' + str(a) + ' -b ' + str(b) + str(Output) 

devrait être la ligne directement au-dessus print cmd_return.

+0

Cela ne fonctionnera pas, l'appel à Popen nécessite cmd. – AlbertoPL

+0

Vous avez raté 'Popen (cmd, ...'. – avakar

5

Vous essayez d'ajouter le résultat d'un appel dans l'appel lui-même. Vous devez exécuter la commande une fois sans la partie + str(Output) pour obtenir la sortie en premier lieu.

Pensez-y de cette façon. Disons que j'ajoutais quelques chiffres ensemble.

z = 5 + b 
b = z + 2 

je dois définir soit z ou b avant les déclarations, selon l'ordre des deux déclarations. Je ne peux pas utiliser une variable avant de savoir de quoi il s'agit. Vous faites la même chose, en utilisant la variable Output avant de le définir.

1

Ce n'est pas censé être une "danse" pour faire bouger les choses. C'est une question de ce qui est sur le côté gauche du "=". Si c'est sur le côté gauche, c'est créé; si c'est du bon côté, c'est utilisé. En l'état, votre exemple ne peut pas fonctionner même un petit peu parce que la ligne 1 veut une partie de la sortie, qui n'est pas créée jusqu'à la fin.

La façon la plus simple de comprendre cela est de travailler en arrière. Vous voulez voir comme le résultat final?

print output[5] 

À droite? Donc, pour y arriver, vous devez obtenir cela à partir d'une plus grande chaîne, non?

output= outputstring.splitlines() 
print output[5] 

D'où vient donc outputstring? C'était d'un sous-processus.

outputstring = process.communicate()[0] 
output= outputstring.splitlines() 
print output[5] 

D'où vient le processus?Il a été créé par sous-processus Popen

process = Popen(cmd, shell=True, stderr=STDOUT, stdout=PIPE) 
outputstring = process.communicate()[0] 
output= outputstring.splitlines() 
print output[5] 

D'où vient le cmd? Je ne peux pas le dire. Votre exemple n'a aucun sens sur la commande en cours d'exécution.

cmd = ? 
process = Popen(cmd, shell=True, stderr=STDOUT, stdout=PIPE) 
outputstring = process.communicate()[0] 
output= outputstring.splitlines() 
print output[5] 
1

il suffit de changer votre première ligne à:

cmd = '-a' + str (a) + '-b' + str (b)

et la déclaration d'impression à la fin à:

impression cmd + str (sortie)

Ceci est sans savoir exactement ce que vous voulez imprimer ... il -seems- comme si votre problème est d'essayer d'utiliser la sortie avant y ou définissez réellement ce qu'est la variable de sortie (comme les messages ci-dessus)

Questions connexes