问题标签 [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 - FFMPEG 和 Pythons 子进程
我正在尝试为FFMPEG
. 我正在使用 pythons 子进程为我想要的每个转换创建一个 ffmpeg 进程。这很好用,但我也想要一种方法来获取转换的进度,无论它是否失败等等。我想我可以通过访问进程的标准输出来做到这一点,如下所示:
打电话subprocess.Popen()
并阅读stdout
:
这有效,但是 ffmpeg 的状态不显示。我假设它与 ffmpeg 刷新它的方式有关。有没有办法访问它?
python - 使用 Python 以编程方式确定最大命令行长度
有谁知道 Python 确定系统最大命令行长度的可移植方式?我正在处理的程序构建一个命令并将其提供给子进程。对于具有较小命令行长度最大值的系统,命令可能会太长。如果我能检测到,可以分解命令以避免超过最大长度,但我还没有找到确定最大值的(便携式)方法。
subprocess - Drools SubProcess 映射失败 - 我做错了什么?
我创建了两个“Hello World”进程来给 subProcess 节点一个旋转。我无法将 subProcess 的输出返回到主进程。我希望有人能告诉我我做错了什么,因为我找不到任何说明我为什么不起作用的文档或示例。
在我的主要过程中,我有以下内容(请注意,我已经剪掉了页眉、页脚和位置 x、y、高度、宽度属性):
这是一个简单的subhello
SubProcess,它只是简单地获取输入并将其打印出来,然后获取输入长度以将其返回:
这是按照我解释文档和示例的方式。在主流程和子流程上都声明了所需的变量,然后只需使用 subProcess in/out 映射元素来设置 from 和 to 属性。
问题是....虽然name
没有问题地传递给子进程,但试图length
回到主进程失败了。subProcesslength
中的 已成功修改。但在退出时,length
主进程并没有改变。
我究竟做错了什么?非常感谢指针和解释。谢谢。
python - 从无限期运行的 Popen 获取部分标准输出和标准错误
我正在围绕应该无限期运行的服务器 cmd 行脚本构建一个包装器。我需要做的是在不等待子流程完成的情况下获取当前的黑啤酒。
我的意思是,如果我运行以下命令,一切正常:
但是,如果我对无限期运行的程序做同样的事情:
它不会回来了……
更新:甚至
挂...
您知道是否有办法以独立于操作系统的方式从 Popen(或类似的线程实现)捕获部分输出?
python - Python,子进程,devenv,为什么没有输出?
我从 Python 脚本构建了一个 Visual Studio 解决方案。一切都很好,除了我无法捕获构建输出。
在这里,两者out
和err
总是空的。无论构建成功与否,都会发生这种情况,如p.returncode
.
python - 需要解决方法:Python 的 select.select() 不适用于子进程的标准输出?
在我的主 python 程序中,我使用以下代码生成了一个子程序:
FWIW,孩子是一个PHP脚本,需要与python程序来回通信。
主 python 程序实际上需要侦听来自其他几个通道的通信 - 使用相同代码生成的其他 PHP 脚本,或来自 的套接字对象socket.accept()
,我想使用select.select()
它,因为这是等待来自各种输入的最有效方式的来源。
我遇到的问题是,select.select()
在 Windows 下不能使用子进程的标准输出文件描述符(这是记录在案的),看起来我将被迫:
- A) 轮询 PHP 脚本以查看它们是否已将任何内容写入标准输出。(这个系统需要非常灵敏,我需要每秒至少轮询 1,000 次!)
- B) 让 PHP 脚本连接到主进程并通过套接字而不是 stdout/stdin 进行通信。
我可能会选择解决方案(B),因为我不能让自己以如此高的频率进行系统轮询,但是当 stdout/stdin 做得很好时,重新连接套接字似乎是一种可悲的资源浪费。
是否有一些替代解决方案可以让我使用 stdout和 select.select()
?
python - 如何在 Python commands.getstatusoutput() 中解释状态码
在一个相关问题中,我询问在哪里可以找到 C 函数“等待”的文档。这是试图找出 commands.getstatusoutput() 模块的返回码。Stackoverflow 通过了,但文档没有帮助。这让我感到困惑:
在 OS X (Leopard) 上运行时,我得到以下输出:(与文档匹配。)
在 OS X 上,执行“ls /fail ; echo $?” 得到以下输出:
在 Linux (Ubuntu Hardy) 上运行时,我得到以下输出:
在 Ubuntu 上,执行“ls /fail”会得到 2:
所以 Python 似乎将状态码乘以 256。嗯?这是在某处记录的吗?
c++ - Boost中是否有跨平台执行?
我想在 C++ 中执行一个子进程。我需要它在 Windows 和 Linux 上工作。Boost中有这样的功能吗?这样做的标准方法是什么?
python - os.popen 子进程转换
这个片段让我得到了我的 BSD 网络接口的虚线四边形。我想弄清楚如何改用 subprocess 模块。
好像我不能以完全相同的方式使用子流程。我不认为我想要 shell=True 或 PIPE。我应该怎么做才能使输出可索引?
谢谢。
python - 块 - 将输入发送到 python 子进程管道
我正在使用 python 测试子流程管道。我知道我可以直接在 python 中执行下面的程序,但这不是重点。我只想测试管道,所以我知道如何使用它。
我的系统是 Linux Ubuntu 9.04,默认 python 2.6。
我从这个文档示例开始。
这行得通,但由于p1
'sstdin
没有被重定向,我必须在终端中输入内容来馈送管道。当我输入^D
关闭标准输入时,我得到了我想要的输出。
但是,我想使用 python 字符串变量将数据发送到管道。首先我尝试在标准输入上写:
没用。我尝试p2.stdout.read()
在最后一行使用,但它也会阻塞。我添加了p1.stdin.flush()
,p1.stdin.close()
但它也没有工作。我然后我开始交流:
所以还是不是这样。
我注意到运行单个进程(如p1
上面,删除p2
)可以完美运行。并且将文件句柄传递给p1
( stdin=open(...)
) 也可以。所以问题是:
是否可以在不阻塞的情况下将数据传递到 python 中的 2 个或多个子进程的管道?为什么不?
我知道我可以运行一个 shell 并在 shell 中运行管道,但这不是我想要的。
更新 1:按照下面 Aaron Digulla 的提示,我现在正在尝试使用线程来使其工作。
首先,我尝试在线程上运行 p1.communicate。
好吧,没用。尝试了其他组合,例如将其更改为.write()
and p2.read()
。没有什么。现在让我们尝试相反的方法:
代码最终在某处阻塞。在衍生线程中,或在主线程中,或两者兼而有之。所以它没有用。如果你知道如何让它工作,如果你能提供工作代码会更容易。我在这里试试。
更新 2
Paul Du Bois 在下面回答了一些信息,所以我做了更多的测试。我已经阅读了整个subprocess.py
模块并了解了它的工作原理。因此,我尝试将其完全应用于代码。
我在 linux 上,但由于我正在使用线程进行测试,所以我的第一种方法是复制在subprocess.py
'scommunicate()
方法上看到的确切 Windows 线程代码,但是对于两个进程而不是一个进程。这是我尝试过的完整列表:
出色地。它没有用。即使在p1.stdin.close()
被调用之后,p2.stdout.read()
仍然会阻塞。
然后我尝试了posix代码subprocess.py
:
也阻止select.select()
. 通过传播print
s,我发现了这一点:
- 阅读是有效的。代码在执行过程中多次读取。
- 写作也在工作。数据写入
p1.stdin
. - 结束时
numwrites
,p1.stdin.close()
被调用。 - 当
select()
开始阻塞时,只有to_read
一些东西,p2.stdout
。to_write
已经是空的了。 os.read()
call 总是返回一些东西,所以p2.stdout.close()
永远不会被调用。
两个测试的结论:关闭stdin
管道上的第一个进程(grep
在示例中)不会使其将其缓冲输出转储到下一个进程并死掉。
没有办法让它工作?
PS:我不想使用临时文件,我已经用文件进行了测试,我知道它可以工作。而且我不想使用窗户。