帮助subprocess.call在Windows机器上

2024-10-03 09:12:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图修改一个trac插件,该插件允许将wiki页面下载到word文档中。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机器上编写代码。有什么办法我可以重做这段代码吗?在

谢谢!在


Tags: 文件代码文档插件trueclose进程windows
1条回答
网友
1楼 · 发布于 2024-10-03 09:12:47

close_fdsis supported on Windows(在该链接后搜索“close\fds”),从python2.6开始(如果stdin/stdout/stderr)开始。你可以考虑升级。在

投票否决后更新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.

因此,您可以使用close_fds = True而不设置stdinstdout或{}(默认值)(或将它们设置为None):

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

或者你subprocess.call和{}:

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)

相关问题 更多 >