GNU/Linux >> Tutoriels Linux >  >> Linux

Comment diriger un appel de sous-processus vers un fichier texte ?

Les options pour popen peut être utilisé en call

args, 
bufsize=0, 
executable=None, 
stdin=None, 
stdout=None, 
stderr=None, 
preexec_fn=None, 
close_fds=False, 
shell=False, 
cwd=None, 
env=None, 
universal_newlines=False, 
startupinfo=None, 
creationflags=0

Alors...

myoutput = open('somefile.txt', 'w')
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml",  "/tmp/video_xml"], stdout=myoutput)

Ensuite, vous pouvez faire ce que vous voulez avec myoutput

En outre, vous pouvez faire quelque chose de plus proche d'une sortie canalisée comme celle-ci.

dmesg | grep hda

serait :

p1 = Popen(["dmesg"], stdout=PIPE)
p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
output = p2.communicate()[0]

Il y a beaucoup d'informations intéressantes et utiles sur la page de manuel de python.


Si vous voulez écrire la sortie dans un fichier, vous pouvez utiliser l'argument stdout de subprocess.call .

Il faut soit

  • None (par défaut, stdout est hérité du parent (votre script))
  • subprocess.PIPE (vous permet de passer d'une commande/processus à un autre)
  • un objet fichier ou un descripteur de fichier (ce que vous voulez, pour que la sortie soit écrite dans un fichier)

Vous devez ouvrir un fichier avec quelque chose comme open et passez l'entier du descripteur d'objet ou de fichier à call :

f = open("blah.txt", "w")
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml",  "/tmp/video_xml"], stdout=f)

Je suppose que n'importe quel objet de type fichier valide fonctionnerait, comme un socket (halètement :)), mais je n'ai jamais essayé.

Comme marcog le mentionne dans les commentaires, vous voudrez peut-être également rediriger stderr, vous pouvez le rediriger vers le même emplacement que stdout avec stderr=subprocess.STDOUT . Toutes les valeurs mentionnées ci-dessus fonctionnent également, vous pouvez rediriger vers différents endroits.


Linux
  1. Comment ajouter du texte à la fin du fichier sous Linux

  2. Comment supprimer les lignes en double dans un fichier texte ?

  3. Comment trouver des parenthèses sans correspondance dans un fichier texte ?

  4. Comment analyser chaque ligne d'un fichier texte comme argument d'une commande ?

  5. Comment insérer un texte au début d'un fichier ?

Comment comparer et fusionner des fichiers texte sous Linux

Comment créer des répertoires à partir d'un fichier texte sous Linux

Comment enregistrer la sortie de la commande Linux dans une image ou un fichier texte

Comment verrouiller un fichier texte sous Linux à l'aide de la commande flock

Comment imprimer des lignes dupliquées dans un fichier texte sous Linux

Comment ajouter du texte au début du fichier sous Linux