Помощь с subprocess.call на машине Windows - PullRequest
3 голосов
/ 19 марта 2009

Я пытаюсь изменить плагин trac , который позволяет загружать вики-страницы в текстовые документы. pagetodoc.py выдает исключение в этой строке:

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

Сказать, что close_fds не поддерживается в Windows. Кажется, что процесс создает некоторые временные файлы в C: \ Windows \ Temp. Я попытался удалить параметр close_fds, но затем файлы, которые пишет подпроцесс, остаются открытыми бесконечно долго. Затем создается исключение, когда файлы записываются позже. Я впервые работаю с Python, и я не знаком с библиотеками. Это еще сложнее, так как большинство людей, вероятно, пишут на Unix-машинах. Любые идеи, как я могу переработать этот код?

Спасибо!

1 Ответ

0 голосов
/ 19 марта 2009

close_fds поддерживается в Windows (поиск «close_fds» после этой ссылки), начиная с Python 2.6 (если stdin / stdout / stderr не перенаправляются). Вы можете рассмотреть возможность обновления.

ОБНОВЛЕНИЕ 2017-11-16 после голосования "за" (почему?) : Из связанного документа:

Обратите внимание, что в Windows вы не можете установить для close_fds значение true, а также перенаправить стандартные дескрипторы, установив stdin, stdout или stderr.

Таким образом, вы можете либо subprocess.call с помощью close_fds = True и не устанавливать stdin, stdout или stderr (по умолчанию) (или установить их на None):

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

или вы subprocess.call с close_fds = False:

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

или (Python> = 3.2) вы позволяете subprocess.call самостоятельно вычислять значение close_fds:

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

...