2009-03-19 7 views
3

J'essaie de modifier un plugin trac qui permet le téléchargement de pages wiki vers des documents Word. pagetodoc.py jette une exception sur cette ligne:Aide avec subprocess.call sur une machine Windows

# Call the subprocess using convenience method 
retval = subprocess.call(command, shell=True, stderr=errptr, stdout=outptr, close_fds = True) 

Dire que close_fds est pas pris en charge sur Windows. Le processus semble créer des fichiers temporaires dans C: \ Windows \ Temp. J'ai essayé de supprimer le paramètre close_fds, mais ensuite les écritures de sous-processus pour rester ouvert indéfiniment. Une exception est ensuite levée lorsque les fichiers sont écrits sur plus tard. C'est la première fois que je travaille avec Python, et je ne suis pas familier avec les bibliothèques. C'est encore plus difficile car la plupart des gens codent probablement sur des machines Unix. Des idées comment je peux retravailler ce code?

Merci!

Répondre

0

close_fdsis supported on Windows (rechercher "close_fds" après ce lien) en commençant par Python 2.6 (si ne sont pas redirigés stdin/stdout/stderr). Vous pourriez envisager de mettre à jour.

MISE A JOUR 16/11/2017 après un vote vers le bas (pourquoi?): A partir du document lié:

Note that on Windows, you cannot set close_fds to true and also redirect the standard handles by setting stdin, stdout or stderr.

Vous pouvez subprocess.call avec close_fds = True et non la mise en stdin, stdout ou stderr (la par défaut) (ou les mettre à None):

subprocess.call(command, shell=True, close_fds = True)

ou vous subprocess.call avec close_fds = False:

subprocess.call(command, shell=True, stderr=errptr, stdout=outptr, close_fds = False)

ou (Python> = 3.2) vous permettent de subprocess.call déterminer la valeur de close_fds par lui-même:

subprocess.call(command, shell=True, stderr=errptr, stdout=outptr)

+0

Je ne suis pas mise à niveau vous est une option, nous avons dû rétrograder de faire fonctionner trac sur windows: < – Shawn

+2

à partir de Python 2.7.9, j'obtiens '' ValueError: close_fds n'est pas supporté sur les plateformes Windows si vous redirigez stdin/stdout/stderr.'' Ce qui pourrait être différent du message d'erreur de l'OP, mais est toujours cast par windows plateforme et suggère que si un support de '' close_fds'' est là, c'est encore limité. – vaab

+0

@vaab Voir ma mise à jour, où j'essaye de répondre à cette question –

Questions connexes