2017-05-27 1 views
0

Je lis sur le sous-processus et joue avec du code. J'utilise Windows 7 avec Python3.6Pourquoi stdout imprime-t-il une chaîne vide dans ce cas?

import subprocess 


process = subprocess.Popen(['notepad', 'C:\\Users\Amit\Downloads\InsiderTrades.txt'],stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
#I'm opening a text file which has a list of stock tickers 

stdout1, stderr1 = process.communicate() 
print(stdout1.decode('ASCII')) 

La sortie je reçois est rien ou

b'' comme valeur pour stdout1.

I "m pas tout à fait sûr de ce que communicate est fournir en sortie dans ce cas. j'avais l'impression qu'il

serait sortie le texte de mon fichier texte ou il quoi que ce soit de sortie de type I dans le fichier texte. J'ai essayé de taper dans le fichier texte ouvert récemment aussi, mais je reçois toujours la même sortie, b''

Alors qu'est-ce que je reçois une chaîne vide, en dépit de taper quelque chose dans le tout nouveau fichier texte.

+1

Si vous tapez cette commande dans une console cmd, elle ouvre le bloc-notes et n'imprime rien. C'est pareil ici. –

+1

Vous ne savez pas exactement ce que vous attendez de cela, mais le bloc-notes ne prend tout simplement pas ses entrées de stdin et ne sort pas sur stdout. C'est un programme GUI. – pvg

Répondre

1

Subprocess est fondamentalement comme si vous exécutez ce com mander dans le terminal.

Alors ce que vous faites est en cours d'exécution notepad some_file.txt qui ouvre juste un fichier dans le bloc-notes, mais il ne l'envoie pas quoi que ce soit à la sortie standard.

Si vous exécutez une commande qui écrit quelque chose sur la sortie standard, vous aurez un stdout1 non vide. Essayez ls par exemple si vous êtes sur un système * nix ou dir si sous Windows.

+0

Merci pour la clarification. Je vais faire une tentative avec 'dir' comme je suis sur un système Windows. – Moondra

+0

Ok. Il semble fonctionner avec 'dir'. Je pense que je commence à comprendre comment subprocess et stdin et stdout fonctionnent maintenant. – Moondra