问题标签 [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 - 如何从 python (2.5) 中的 subprocess.Popen 获取“实时”信息
我想通过以下方式使用 subprocess 模块:
- 创建一个可能需要很长时间才能执行的新进程。
- 捕获
stdout
(或stderr
,或可能两者,一起或单独) - 处理来自子进程的数据,可能会在接收到的每一行上触发事件(在 wxPython 中说),或者现在只是将它们打印出来。
我已经使用 Popen 创建了进程,但是如果我使用communicate(),一旦进程终止,数据就会立即出现。
如果我创建一个单独的线程来阻止readline()
(myprocess.stdout
使用stdout = subprocess.PIPE
)我也不会使用此方法获得任何行,直到进程终止。(无论我设置为 bufsize )
有没有办法解决这个问题,并且在多个平台上运行良好?
python - 有没有办法轮询从 subprocess.Popen 返回的文件句柄?
说我写这个:
现在如果我这样做
我的程序一直等到子进程输出下一行。
有什么魔法我可以做的,p.stdout
这样我就可以读取输出(如果有的话),否则就继续?我正在寻找类似的东西Queue.get_nowait()
我知道我可以创建一个阅读线程p.stdout
,但假设我不能创建新线程。
python - 如何在多处理器系统上生成并行子进程?
我有一个 Python 脚本,我想将它用作另一个 Python 脚本的控制器。我有一个有 64 个处理器的服务器,所以想为第二个 Python 脚本生成多达 64 个子进程。子脚本被称为:
其中 NAME 类似于 XYZ、ABC、NYU 等。
在我的父控制器脚本中,我从列表中检索名称变量:
所以我的问题是,作为孩子产生这些过程的最佳方式是什么?我想一次将子进程的数量限制为 64,因此需要跟踪状态(如果子进程已完成或未完成),以便我可以有效地保持整代运行。
我考虑使用 subprocess 包,但拒绝了它,因为它一次只产生一个孩子。我终于找到了多处理器包,但我承认被整个线程与子进程文档所淹没。
现在,我的脚本subprocess.call
一次只生成一个孩子,如下所示:
我真的希望它一次产生 64 个孩子。在其他 stackoverflow 问题中,我看到人们使用队列,但这似乎会影响性能?
python - Python OSError:[Errno 2]
我有以下代码试图在 Linux 中启动下面的每个“命令”。如果两个命令中的任何一个因任何原因崩溃,该模块会尝试保持每个命令运行。
执行代码时会抛出以下异常:
我想我遗漏了一些明显的东西,任何人都可以看到上面的代码有什么问题吗?
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 脚本,但这不会是跨平台的。最终脚本可以在这里找到
python - 从 python subprocess.Popen(command, stderr=subprocess.PIPE, stdout=subprocess.PIPE) 捕获标准错误
我在这里看过很多次这个帖子;但未能从命令中捕获故意错误。到目前为止我发现的最好的部分工作..
python - 如何捕获子进程的 stdout 输出?
我正在尝试用 Python 编写一个程序,并被告知运行一个 .exe 文件。当这个 .exe 文件运行时,它会吐出大量数据,我需要将某一行打印到屏幕上。我很确定我需要使用subprocess.popen
或类似的东西,但我是 subprocess 的新手并且不知道。任何人都有一个简单的方法让我完成这项工作?
python - Python 和子进程
这是我正在处理的脚本。它应该为下面的循环运行一个 .exe 文件。(顺便说一句,不确定它是否可见,但 for el in ('90','52.6223',...) 在循环之外并与其余部分进行嵌套循环)我不确定排序是否正确或什么不是。此外,当 .exe 文件运行时,它会吐出一些东西,我需要在屏幕上打印出某一行(因此您会看到 AspecificLinfe= ... )。任何有用的答案都会很棒!
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 环境中调用这些行为的一些奇怪设置吗?
python - 在子进程调用期间,在 Python 中捕获关键的 Windows 错误,而不是让操作系统通过显示令人讨厌的错误弹出窗口来处理它
“应用程序未能正确初始化...单击确定,终止应用程序。” 是来自错误弹出窗口的消息。在 Python 代码中捕获这些错误的方法是什么?