Je veux juste utiliser os.system ("dir") et aussi pouvoir enregistrer le texte sorti dans une variable. J'ai essayé d'utiliser sys.stdout.read() mais l'exécution de sys.stdout.readable() renvoie False. Savez-vous comment je peux lire à partir du terminal?

2
SlamAKnife The Youtuber 2 juin 2020 à 04:06

4 réponses

Meilleure réponse

En utilisant la bibliothèque os:

info = os.popen('dir').read()
0
user3041840 2 juin 2020 à 01:25

Si vous voulez lire, allez-y avec

x = input()

Cela lit une ligne du terminal. x est une chaîne par défaut, mais vous pouvez la caster, par exemple en int, comme ceci

x = int(x)
0
Eeshaan 2 juin 2020 à 01:51

Il y a un peu de confusion ici sur les différents flux, et peut-être sur une meilleure façon de faire les choses.

Pour le cas spécifique de dir, vous pouvez remplacer la fonctionnalité souhaitée par os.listdir, ou mieux encore os.scandir.

Dans le cas plus général, vous ne pourrez pas lire un flux stdout arbitraire. Si vous souhaitez faire cela, vous devrez configurer un subprocess dont vous contrôlez les flux d'E / S. Ce n'est pas beaucoup plus compliqué que d'utiliser os.system. vous pouvez utiliser subprocess.run, par exemple:

content = subprocess.run("dir", stdout=subprocess.PIPE, check=True).stdout

L'objet renvoyé par run a un attribut stdout qui contient tout ce dont vous avez besoin.

0
Mad Physicist 2 juin 2020 à 01:38

Vous pouvez utiliser la méthode subprocess.check_output

Exemple

import subprocess as sp

stdout = sp.check_output("dir")
print(stdout)
1
Sylvaus 2 juin 2020 à 01:16