J'ai un script dans lequel j'essaie d'utiliser subprocess.call pour exécuter une série de commandes shell, mais qui semble avoir certaines commandes omises lors de l'exécution.python subprocess.call et pipes
Plus précisément:
#!/usr/bin/python
import tempfile
import subprocess
import os
import re
grepfd, grepfpath = tempfile.mkstemp(suffix=".xx")
sedfd, sedfpath = tempfile.mkstemp(suffix=".xx")
# grepoutfile = open(grepfpath, 'w')
sedoutfile = open(sedfpath, 'w')
subprocess.call(['cp','/Users/bobby/Downloads/sample.txt', grepfpath])
sedcmd = [ 'sort',
grepfpath,
'|',
'uniq',
'|',
'sed',
'-e',
'"s/bigstring of word/ smaller /"',
'|',
'column',
'-t',
'-s',
'"=>"' ]
print "sedcmd = ", sedcmd
subprocess.call(['ls', grepfpath ])
subprocess.call(['sort', '|', 'uniq' ], stdin = grepfd)
subprocess.call(sedcmd, stdout = sedoutfile)
Et il génère cette sortie comme:
python d3.py
sedcmd = [ 'type',/var/dossiers/3h/_0xwt5bx0hx8tgx06cmq9h_4f183ql/T/tmp5Gp0ff.xx ',' | ',' uniq ',' | ',' sed ',' -e ',' "s/bigstring de mot/plus petit /" ',' | ',' colonne ',' -t ',' -s ',' "=>" ' /var/folders/3h/_0xwt5bx0hx8tgx06cmq9h_4f183ql/T/tmp5Gp0ff.xx tri: ouvert échoué: |: aucun fichier ou répertoire
tri: option invalide - e Essayez `sort --help 'pour plus d'informations. Le premier 'tri: open a échoué: |: Aucun fichier de ce type ... ne provient du premier sous-processus [' sort ',' | ',' uniq '], stdin = grepfd) La' tri: invalide option - e .. provient du second appel de sous-processus (sedcmd).
J'ai vu beaucoup d'exemples qui utilisent des tuyaux dans ce contexte - alors qu'est-ce que je fais mal?
Merci!
Si vous essayez d'utiliser les fonctionnalités shell comme les tuyaux, vous allez besoin de passer une chaîne (pas une liste) et de définir 'shell = True'. Lisez la documentation 'subprocess' pour plus de détails. – larsks