问题标签 [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 投票
10 回答
13245 浏览

python - 如何从 python (2.5) 中的 subprocess.Popen 获取“实时”信息

我想通过以下方式使用 subprocess 模块:

  1. 创建一个可能需要很长时间才能执行的新进程。
  2. 捕获stdout(或stderr,或可能两者,一起或单独)
  3. 处理来自子进程的数据可能会在接收到的每一行上触发事件(在 wxPython 中说),或者现在只是将它们打印出来。

我已经使用 Popen 创建了进程,但是如果我使用communicate(),一旦进程终止,数据就会立即出现。

如果我创建一个单独的线程来阻止readline()myprocess.stdout使用stdout = subprocess.PIPE)我也不会使用此方法获得任何行,直到进程终止。(无论我设置为 bufsize )

有没有办法解决这个问题,并且在多个平台上运行良好?

0 投票
2 回答
3690 浏览

python - 有没有办法轮询从 subprocess.Popen 返回的文件句柄?

说我写这个:

现在如果我这样做

我的程序一直等到子进程输出下一行。

有什么魔法我可以做的,p.stdout这样我就可以读取输出(如果有的话),否则就继续?我正在寻找类似的东西Queue.get_nowait()

我知道我可以创建一个阅读线程p.stdout,但假设我不能创建新线程。

0 投票
4 回答
61268 浏览

python - 如何在多处理器系统上生成并行子进程?

我有一个 Python 脚本,我想将它用作另一个 Python 脚本的控制器。我有一个有 64 个处理器的服务器,所以想为第二个 Python 脚本生成多达 64 个子进程。子脚本被称为:

其中 NAME 类似于 XYZ、ABC、NYU 等。

在我的父控制器脚本中,我从列表中检索名称变量:

所以我的问题是,作为孩子产生这些过程的最佳方式是什么?我想一次将子进程的数量限制为 64,因此需要跟踪状态(如果子进程已完成或未完成),以便我可以有效地保持整代运行。

我考虑使用 subprocess 包,但拒绝了它,因为它一次只产生一个孩子。我终于找到了多处理器包,但我承认被整个线程与子进程文档所淹没。

现在,我的脚本subprocess.call一次只生成一个孩子,如下所示:

我真的希望它一次产生 64 个孩子。在其他 stackoverflow 问题中,我看到人们使用队列,但这似乎会影响性能?

0 投票
6 回答
96014 浏览

python - Python OSError:[Errno 2]

我有以下代码试图在 Linux 中启动下面的每个“命令”。如果两个命令中的任何一个因任何原因崩溃,该模块会尝试保持每个命令运行。

执行代码时会抛出以下异常:

我想我遗漏了一些明显的东西,任何人都可以看到上面的代码有什么问题吗?

0 投票
8 回答
122999 浏览

python - 使用子进程在 Windows 上运行 Python 脚本

有没有一种简单的方法可以在 Windows/Linux/OS X 上运行 Python 脚本?

在后两者上subprocess.Popen("/the/script.py")有效,但在 Windows 上出现以下错误:


蒙库特的评论:用例不清楚。为什么要使用 subprocess 来运行 python 脚本?是否有什么东西阻止您导入脚本并调用必要的函数?

我正在编写一个快速脚本来测试 Python 命令行工具的整体功能(在各种平台上进行测试)。基本上它必须在一个临时文件夹中创建一堆文件,在这个文件夹上运行脚本并检查文件是否被正确重命名。

我本可以导入脚本并调用该函数,但由于它依赖sys.argv并使用sys.exit(),我需要执行类似..

另外,我想捕获 stdout 和 stderr 以进行调试,以防出现问题。

当然,更好的方法是以更可单元测试的方式编写脚本,但脚本基本上是“完成”的,我正在做最后一批测试,然后再发布“1.0”版本(之后我要去进行重写/重组,这将更加整洁和可测试)

基本上,在找到sys.executable变量后,将脚本作为一个进程简单地运行要容易得多。我会把它写成一个 shell 脚本,但这不会是跨平台的。最终脚本可以在这里找到

0 投票
2 回答
16858 浏览

python - 从 python subprocess.Popen(command, stderr=subprocess.PIPE, stdout=subprocess.PIPE) 捕获标准错误

我在这里看过很多次这个帖子;但未能从命令中捕获故意错误。到目前为止我发现的最好的部分工作..

0 投票
2 回答
14129 浏览

python - 如何捕获子进程的 stdout 输出?

我正在尝试用 Python 编写一个程序,并被告知运行一个 .exe 文件。当这个 .exe 文件运行时,它会吐出大量数据,我需要将某一行打印到屏幕上。我很确定我需要使用subprocess.popen或类似的东西,但我是 subprocess 的新手并且不知道。任何人都有一个简单的方法让我完成这项工作?

0 投票
1 回答
2262 浏览

python - Python 和子进程

这是我正在处理的脚本。它应该为下面的循环运行一个 .exe 文件。(顺便说一句,不确定它是否可见,但 for el in ('90','52.6223',...) 在循环之外并与其余部分进行嵌套循环)我不确定排序是否正确或什么不是。此外,当 .exe 文件运行时,它会吐出一些东西,我需要在屏幕上打印出某一行(因此您会看到 AspecificLinfe= ... )。任何有用的答案都会很棒!

0 投票
2 回答
1428 浏览

python - Python 2.6 subprocess.call() 似乎正在调用触发 Perl 污点检查的 setgid 行为。我该如何解决?

我在 Python 的 subprocess.call() 和 os.system() 之间有一些奇怪的行为差异,这似乎与 setgid 有关。不同之处在于,在使用 subprocess.call() 时会调用 Perl 的污染检查,这会产生问题,因为我无法修改所有需要添加无污染代码的 Perl 脚本。

例如,“process.py”

“子进程.pl”

输出 - subprocess.pl 的两次运行应该是相同的,但是使用 subprocess.call() 运行的一次会出现污染错误:

虽然使用 os.system() 有效,但我真的更愿意使用 subprocess.check_call() 因为它更向前兼容并且具有很好的检查行为。

任何可以解释为什么这两者不同的建议或文档?这可能是我的本地 unix 环境中调用这些行为的一些奇怪设置吗?

0 投票
1 回答
1001 浏览

python - 在子进程调用期间,在 Python 中捕获关键的 Windows 错误,而不是让操作系统通过显示令人讨厌的错误弹出窗口来处理它

“应用程序未能正确初始化...单击确定,终止应用程序。” 是来自错误弹出窗口的消息。在 Python 代码中捕获这些错误的方法是什么?