问题标签 [subprocess]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
5752 浏览

python - 我可以将 SIGINT 发送到 Windows 上的 Python 子进程吗?

我有一个 Python 脚本在 Windows 上管理一个 gdb 进程,我需要能够向生成的进程发送一个 SIGINT 以停止目标进程(由 gdb 管理)

Win32 中似乎只有 SIGTERM 可用,但很明显,如果我从控制台运行 gdb 并按 Ctrl+C,它认为它正在接收 SIGINT。有没有办法可以伪造这个,以便该功能在所有平台上都可用?

(我正在使用 subprocess 模块和 python 2.5/2.6)

0 投票
4 回答
1226 浏览

python - Python子进程问题

我希望能够在 python 中生成一个进程并进行两种通信。当然,Pexpect 做到了这一点,并且确实是我可能采用的一种方式。但是,它并不十分理想。

我的理想情况是拥有一个只涉及标准 python 库的跨平台通用技术。子进程非常接近,但我必须等待进程终止才能安全地与之交互这一事实是不可取的。

查看文档,它确实说有一个我可以直接操作的标准输入、标准输出和标准错误文件描述符,但是有一个很大的警告说“不要这样做”。不幸的是,它并不完全清楚为什么存在这个警告,但从我从谷歌收集到的信息是它与操作系统缓冲有关,并且当这些内部缓冲区失败时,可以编写出意外死锁的代码(作为旁注,任何例子显示错误的方式和正确的方式将不胜感激)。

因此,冒着代码陷入潜在死锁的风险,我认为使用 poll 或 select 从正在运行的进程交互读取而不杀死它可能会很有趣。虽然我失去了(我认为)跨平台能力,但我喜欢它不需要额外的库的事实。但更重要的是,我想知道这是否是个好主意。我还没有尝试过这种方法,但我担心可能会破坏我的程序的陷阱。它可以工作吗?我应该测试什么?

在我的具体情况下,我并不真正关心能否写入进程,只是反复读取它。另外,我不希望我的进程转储大量文本,所以我希望避免死锁问题,但是我想确切地知道这些限制是什么,并能够编写一些测试来查看它在哪里发生故障。

0 投票
2 回答
3148 浏览

python - Python:子进程中的持久外壳变量

我正在尝试使用 Pythons subprocess 模块执行一系列命令,但是我需要在运行它们之前使用 export 设置 shell 变量。当然,shell 似乎不是持久的,所以当我稍后运行命令时,这些 shell 变量会丢失。

有什么办法可以解决这个问题吗?我可以创建一个 /bin/sh 进程,但是如何获得在该进程下运行的命令的退出代码?

0 投票
1 回答
794 浏览

timer - 线程、子进程和僵尸

我需要使用线程和 SSH 在精确的时刻分别启动多个远程作业。所以我写:

该代码有效,但它使我的操作系统充满了僵尸。老实说,我相信communicate() 方法负责处理子进程,等待它终止。我哪里错了?

0 投票
1 回答
322 浏览

python - 停止长时间运行的子进程

我使用 subprocess.Popen() 创建了一个运行很长时间的子进程。它从自己的线程调用,线程被阻塞直到子进程完成/返回。

我希望能够中断子进程,以便进程在我需要时终止。

有任何想法吗?

0 投票
3 回答
1189 浏览

python - Python:无法通过使用子进程模块在另一个命令行应用程序中读取/写入

我在 Windows 中使用 Python 3.0 并尝试自动化命令行应用程序的测试。用户可以在 Application Under Test 中键入命令,它会以 2 个 XML 数据包的形式返回输出。一个是包,另一个是包。通过分析这些数据包,我可以验证他的结果。我将代码如下

我无法返回任何输出。它卡在我尝试使用 readline() 读取输出的地方。我试过 read() 也卡住了

当我手动运行命令行应用程序并键入命令时,我将输出正确地作为两个 xml 数据包返回,如下所示

但是当我使用如下的通信()时,我得到了 Sent 数据包并且永远不会得到 Recv: 数据包。为什么我错过了 recv 数据包?通信(0 应该从标准输出中带来一切。rt?

任何人都可以帮助我提供应该工作的示例代码吗?我不知道是否需要在单独的线程中读写。请帮我。我需要重复读/写。我可以使用python中的任何高级模块吗?我认为 Pexpect 模块在 Windows 中不起作用

0 投票
2 回答
4291 浏览

python - Python Popen 困难:找不到文件

我正在尝试使用 python 来运行程序。

运行这个小片段会出现错误:

WindowsError: [错误 2] 系统找不到指定的文件

该程序存在,我直接从资源管理器复制并粘贴了exe的绝对路径。我尝试了其他方法,发现如果我将 EXE 与 python 脚本一起放在源文件夹中并使用“./sa.exe”,那么它就可以工作。我唯一能想到的是我正在从一个单独的分区(F:) 运行 python 脚本(和 python)。

有任何想法吗?谢谢

0 投票
7 回答
25467 浏览

python - 使用 subprocess.Popen 处理大输出

我有一些执行外部应用程序的 Python 代码,当应用程序的输出量很少时,它可以正常工作,但在输出量很大时会挂起。我的代码如下所示:

文档中有一些评论似乎表明了潜在的问题。在等待中,有:

警告:如果子进程生成足够多的输出到 a stdoutorstderr管道,从而阻塞等待 OS 管道缓冲区接受更多数据,这将死锁。用来communicate()避免这种情况。

虽然在沟通中,我看到:

注意 读取的数据是缓存在内存中的,所以如果数据量很大或没有限制,请不要使用此方法。

所以我不清楚如果我有大量数据,我应该使用其中任何一个。他们没有说明在这种情况下我应该使用什么方法。

我确实需要 exec 的返回值,并解析和使用stdoutand stderr

那么,在 Python 中执行具有大量输出的外部应用程序的等效方法是什么?

0 投票
3 回答
8746 浏览

python - 在 Python 中使用子进程从进程中无缓冲读取

我正在尝试从产生长时间且耗时的输出的过程中读取。但是,我想在它产生捕捉它的输出。但是使用类似下面的东西似乎正在缓冲命令的输出,所以我最终一次得到了所有的输出行:

我正在 MacOS 10.5 上尝试这个

0 投票
30 回答
343634 浏览

python - 使用带有超时的模块“子进程”

这是运行返回其数据的任意命令stdout或在非零退出代码上引发异常的 Python 代码:

communicate用于等待进程退出:

subprocess模块不支持超时——能够终止运行超过 X 秒的进程——因此,communicate可能需要永远运行。

在 Windows 和 Linux 上运行的 Python 程序中实现超时的最简单方法是什么?