在Windows机器上帮助subprocess.call

时间:2009-03-19 15:28:00

标签: python trac python-2.4

我正在尝试修改允许将wiki页面下载到word文档的trac插件。 pagetodoc.py在此行引发异常:

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

说Windows上不支持close_fds。该过程似乎在C:\ Windows \ Temp中创建了一些临时文件。我尝试删除close_fds参数,但随后文件子进程写入无限期保持打开状态。然后在稍后写入文件时抛出异常。这是我第一次使用Python,我不熟悉这些库。由于大多数人可能在Unix机器上编码,因此更加困难。我有什么想法可以重写这段代码吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

从Python 2.6开始,

close_fds is supported on Windows (在该链接后搜索“close_fds”)(如果stdin / stdout / {{ 1}}未被重定向)。您可以考虑升级。

投票后更新2017-11-16(为什么?):来自关联的文档:

  

请注意,在Windows上,您不能将close_fds设置为true   通过设置stdin,stdout或stderr来重定向标准句柄。

因此,您stderr可以subprocess.call而不是设置close_fds = Truestdinstdout(默认设置)(或将其设置为{{1} }}):

  

stderr

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

  

subprocess.call

或(Python> = 3.2)您让close_fds = False单独找出subprocess.call(command, shell=True, stderr=errptr, stdout=outptr, close_fds = False)的值:

  

subprocess.call