Comment puis-je diriger un sous-processus d'appel d'un fichier texte?
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"])
Droit maintenant, j'ai un script que je lance. Quand je le lance et il frappe de cette ligne, il commence à imprimer des trucs parce que run.sh a empreintes.
Comment puis-je pipe à un fichier texte aussi? (Et aussi, si possible)
Vous devez vous connecter pour publier un commentaire.
Si vous voulez écrire la sortie dans un fichier, vous pouvez utiliser le stdout-argument de
subprocess.call
.Il faut
None
,subprocess.PIPE
, un fichier objet ou un descripteur de fichier. La première est la valeur par défaut, la sortie standard est héritée de la mère (votre script). La seconde vous permet de tuyau d'une commande/processus à un autre. Le troisième et le quatrième sont ce que vous voulez, à la sortie écrites dans un fichier.Vous avez besoin pour ouvrir un fichier avec quelque chose comme
open
et de passer de l'objet ou du descripteur de fichier entiercall
:Je devine tout de fichier valide comme objet de travail, comme une prise (gasp :)), mais je n'ai jamais essayé.
Comme marcog mentionne dans les commentaires si vous souhaitez rediriger stderr, vous pouvez le rediriger vers le même emplacement que stdout avec
stderr=subprocess.STDOUT
. Une des valeurs mentionnées ci-dessus fonctionne, vous pouvez le rediriger vers d'autres lieux.subprocess.call(["echo", "1", ">>", "t.txt"], shell=True)
devrait fonctionner.shlex.quote
si vous êtes de passage de toute éventuelle sale de données à un shell interne est exécuté.with open("blah.txt","w") as f: subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], stdout=f)
@SkurmedelLes options pour
popen
peut être utilisé danscall
Donc...
Puis vous pouvez faire ce que vous voulez avec
myoutput
(qui aurait besoin d'être un fichier btw).Aussi, vous pouvez faire quelque chose de plus proche d'une canalisation de sortie de ce genre.
serait:
Il y a beaucoup de belles, infos utiles sur le python page de manuel.