2009-03-19 4 views
3

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

# 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. Любые идеи, как я могу переделать этот код?

Спасибо!

ответ

0

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

UPDATE 2017-11-16 после первоначального голосования (почему?): Из связанного дока:

Note that on Windows, you cannot set close_fds to true and also redirect the standard handles by setting stdin, stdout or 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)

+0

Я не уверен, что модернизация является вариантом, мы должны были понизить, чтобы получить ПРОФЫ работы над windows: < – Shawn

+2

с Python 2.7.9, я получаю '' ValueError: close_fds не поддерживается на таблицах Windows, если вы перенаправляете stdin/stdout/stderr.'', которые могут отличаться от сообщения об ошибке от OP, но все же литой таблицей форм Windows и предполагает, что если поддержка '' close_fds'' существует, она все еще ограничена. – vaab

+0

@vaab См. Мое обновление, где я пытаюсь решить эту проблему –

Смежные вопросы