有关 Windows 计算机上的 subprocess.call 的帮助

发布于 2024-07-15 03:31:07 字数 556 浏览 9 评论 0原文

我正在尝试修改 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 机器上编码。 我有什么想法可以重新编写这段代码吗?

谢谢!

I am trying to modify a trac plugin that allows downloading of wiki pages to word documents. pagetodoc.py throws an exception on this line:

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

Saying that close_fds is not supported on Windows. The process seems to create some temporary files in C:\Windows\Temp. I tried removing the close_fds parameter, but then files the subprocess writes to stay open indefinitely. An exception is then thrown when the files are written to later. This is my first time working with Python, and I am not familiar with the libraries. It is even more difficult since most people probably code on Unix machines. Any ideas how I can rework this code?

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

违心° 2024-07-22 03:31:07

close_fds Windows 支持(在该链接后搜索“close_fds”)从 Python 2.6 开始(如果 stdin/stdout/stderr 不会被重定向)。 您可以考虑升级。

从链接的文档:

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

因此,您可以将 subprocess.callclose_fds = True 结合使用,而不设置 stdinstdoutstderr(默认)(或将它们设置为None):

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

subprocess.callclose_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)

close_fds is supported on Windows (search for "close_fds" after that link) starting with Python 2.6 (if stdin/stdout/stderr are not redirected). You might consider upgrading.

From the linked doc:

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

So you can either subprocess.call with close_fds = True and not setting stdin, stdout or stderr (the default) (or setting them to None):

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

or you subprocess.call with close_fds = False:

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

or (Python >= 3.2) you let subprocess.call figure out the value of close_fds by itself:

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文