问题标签 [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.
python - 我可以将 SIGINT 发送到 Windows 上的 Python 子进程吗?
我有一个 Python 脚本在 Windows 上管理一个 gdb 进程,我需要能够向生成的进程发送一个 SIGINT 以停止目标进程(由 gdb 管理)
Win32 中似乎只有 SIGTERM 可用,但很明显,如果我从控制台运行 gdb 并按 Ctrl+C,它认为它正在接收 SIGINT。有没有办法可以伪造这个,以便该功能在所有平台上都可用?
(我正在使用 subprocess 模块和 python 2.5/2.6)
python - Python子进程问题
我希望能够在 python 中生成一个进程并进行两种通信。当然,Pexpect 做到了这一点,并且确实是我可能采用的一种方式。但是,它并不十分理想。
我的理想情况是拥有一个只涉及标准 python 库的跨平台通用技术。子进程非常接近,但我必须等待进程终止才能安全地与之交互这一事实是不可取的。
查看文档,它确实说有一个我可以直接操作的标准输入、标准输出和标准错误文件描述符,但是有一个很大的警告说“不要这样做”。不幸的是,它并不完全清楚为什么存在这个警告,但从我从谷歌收集到的信息是它与操作系统缓冲有关,并且当这些内部缓冲区失败时,可以编写出意外死锁的代码(作为旁注,任何例子显示错误的方式和正确的方式将不胜感激)。
因此,冒着代码陷入潜在死锁的风险,我认为使用 poll 或 select 从正在运行的进程交互读取而不杀死它可能会很有趣。虽然我失去了(我认为)跨平台能力,但我喜欢它不需要额外的库的事实。但更重要的是,我想知道这是否是个好主意。我还没有尝试过这种方法,但我担心可能会破坏我的程序的陷阱。它可以工作吗?我应该测试什么?
在我的具体情况下,我并不真正关心能否写入进程,只是反复读取它。另外,我不希望我的进程转储大量文本,所以我希望避免死锁问题,但是我想确切地知道这些限制是什么,并能够编写一些测试来查看它在哪里发生故障。
python - Python:子进程中的持久外壳变量
我正在尝试使用 Pythons subprocess 模块执行一系列命令,但是我需要在运行它们之前使用 export 设置 shell 变量。当然,shell 似乎不是持久的,所以当我稍后运行命令时,这些 shell 变量会丢失。
有什么办法可以解决这个问题吗?我可以创建一个 /bin/sh 进程,但是如何获得在该进程下运行的命令的退出代码?
timer - 线程、子进程和僵尸
我需要使用线程和 SSH 在精确的时刻分别启动多个远程作业。所以我写:
该代码有效,但它使我的操作系统充满了僵尸。老实说,我相信communicate() 方法负责处理子进程,等待它终止。我哪里错了?
python - 停止长时间运行的子进程
我使用 subprocess.Popen() 创建了一个运行很长时间的子进程。它从自己的线程调用,线程被阻塞直到子进程完成/返回。
我希望能够中断子进程,以便进程在我需要时终止。
有任何想法吗?
python - Python:无法通过使用子进程模块在另一个命令行应用程序中读取/写入
我在 Windows 中使用 Python 3.0 并尝试自动化命令行应用程序的测试。用户可以在 Application Under Test 中键入命令,它会以 2 个 XML 数据包的形式返回输出。一个是包,另一个是包。通过分析这些数据包,我可以验证他的结果。我将代码如下
我无法返回任何输出。它卡在我尝试使用 readline() 读取输出的地方。我试过 read() 也卡住了
当我手动运行命令行应用程序并键入命令时,我将输出正确地作为两个 xml 数据包返回,如下所示
但是当我使用如下的通信()时,我得到了 Sent 数据包并且永远不会得到 Recv: 数据包。为什么我错过了 recv 数据包?通信(0 应该从标准输出中带来一切。rt?
任何人都可以帮助我提供应该工作的示例代码吗?我不知道是否需要在单独的线程中读写。请帮我。我需要重复读/写。我可以使用python中的任何高级模块吗?我认为 Pexpect 模块在 Windows 中不起作用
python - Python Popen 困难:找不到文件
我正在尝试使用 python 来运行程序。
运行这个小片段会出现错误:
WindowsError: [错误 2] 系统找不到指定的文件
该程序存在,我直接从资源管理器复制并粘贴了exe的绝对路径。我尝试了其他方法,发现如果我将 EXE 与 python 脚本一起放在源文件夹中并使用“./sa.exe”,那么它就可以工作。我唯一能想到的是我正在从一个单独的分区(F:) 运行 python 脚本(和 python)。
有任何想法吗?谢谢
python - 使用 subprocess.Popen 处理大输出
我有一些执行外部应用程序的 Python 代码,当应用程序的输出量很少时,它可以正常工作,但在输出量很大时会挂起。我的代码如下所示:
文档中有一些评论似乎表明了潜在的问题。在等待中,有:
警告:如果子进程生成足够多的输出到 a
stdout
orstderr
管道,从而阻塞等待 OS 管道缓冲区接受更多数据,这将死锁。用来communicate()
避免这种情况。
虽然在沟通中,我看到:
注意 读取的数据是缓存在内存中的,所以如果数据量很大或没有限制,请不要使用此方法。
所以我不清楚如果我有大量数据,我应该使用其中任何一个。他们没有说明在这种情况下我应该使用什么方法。
我确实需要 exec 的返回值,并解析和使用stdout
and stderr
。
那么,在 Python 中执行具有大量输出的外部应用程序的等效方法是什么?
python - 在 Python 中使用子进程从进程中无缓冲读取
我正在尝试从产生长时间且耗时的输出的过程中读取。但是,我想在它产生时捕捉它的输出。但是使用类似下面的东西似乎正在缓冲命令的输出,所以我最终一次得到了所有的输出行:
我正在 MacOS 10.5 上尝试这个
python - 使用带有超时的模块“子进程”
这是运行返回其数据的任意命令stdout
或在非零退出代码上引发异常的 Python 代码:
communicate
用于等待进程退出:
该subprocess
模块不支持超时——能够终止运行超过 X 秒的进程——因此,communicate
可能需要永远运行。
在 Windows 和 Linux 上运行的 Python 程序中实现超时的最简单方法是什么?