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

java - 在 Java 中实现“系统”命令

我需要一个“系统”函数调用,与 Python、Perl、PHP、Ruby 和 c 中的函数调用相同。当它在 Rhino JavaScript 引擎上运行时,它将成为一个名为 Narwhal 的 JavaScript 标准库的一个组件,而 Rhino JavaScript 引擎又在 Java 上运行。

问题在于,Java 的标准库似乎已经抽象出生成共享父进程标准输入输出的子进程的能力。这意味着您不能将交互性推迟到子流程。

我的第一次破解是实现 Python 的 subprocess.popen。这使用三个“泵”线程来主动独立地复制父进程的标准输入输出(以防止死锁)。不幸的是,这给我们带来了两个问题。首先,当子进程自愿退出时,输入不会自动关闭。其次,子进程的流没有正确缓冲和刷新。

我正在寻找能够使我们的 require("os").system() 命令按预期工作的解决方案。

该项目位于http://narwhaljs.org

相关代码:

0 投票
4 回答
3713 浏览

python - 带有 heredocs 的 Python 子进程

我在玩 Python 的 subprocess 模块,尝试了一些示例,但我似乎无法让 heredoc 语句正常工作。

这是我正在玩的一个简单的例子:

运行上面的代码时出现以下错误:

我做错了吗?这甚至可能吗?如果是这样,我将如何去做?


更新

只是想说这永远不应该在真正的 python 程序中执行,因为有更好的方法可以做到这一点。

0 投票
4 回答
95328 浏览

python - 如何从 subprocess.Popen() 获取输出。proc.stdout.readline() 块,没有数据打印出来

我想要执行 Test_Pipe.py 的输出,我在 Linux 上尝试了以下代码,但没有成功。

Test_Pipe.py

调用者.py

线路proc.stdout.readline()被阻塞,所以没有数据打印出来。

0 投票
4 回答
11431 浏览

python - subprocess.call 的问题

在我当前的工作目录中,我有目录 ROOT/ 里面有一些文件。

我知道我可以执行cp -r ROOT/* /dst并且我没有问题。

但是如果我打开我的 Python 控制台并写下这个:

它不起作用!

我有这个错误:cp: cannot stat ROOT/*: No such file or directory

你能帮助我吗?

0 投票
3 回答
343 浏览

python - 从正在运行的进程中调用函数

我的程序启动了一个子进程,它必须在初始化后向父进程发送某种信号。如果我可以在父级中设置一个处理程序,这将是完美的,它在发送此信号时被调用。有什么办法吗?

阿连迪

0 投票
2 回答
1094 浏览

python - 在 Python 2.5 及以下版本不使用 shell 创建可执行进程

正如标题所说:

  1. subprocess模块不能使用,因为这应该适用于 2.4 和 2.5
  2. 不应生成 Shell 进程来传递参数。

为了解释 (2),请考虑以下代码:

如您所见os.systemos.popen通过系统外壳(“sh”)运行给定的命令(“foo”)。我不希望这种情况发生(否则,丑陋的“未找到”消息会在我无法控制的情况下打印到程序 stderr)。

最后,我应该能够将参数传递给这个程序(上例中的“arg”)。

在 Python 2.5 和 2.4 中如何做到这一点?

0 投票
2 回答
3952 浏览

python - 使用 Python 跟踪进程状态

我想在我的 Python 脚本中启动一些子进程,然后跟踪它们何时完成或崩溃。

当进程仍在运行时,subprocess.Popen.poll() 似乎返回 None,成功时返回 0,失败时返回非零。在所有操作系统上都可以预期吗?不幸的是,这些方法缺少标准库文档......

子流程模块是否最适合实现这一目标?

谢谢

0 投票
3 回答
3407 浏览

python - 在Django中,如何调用启动时间慢的子进程

假设您在 Linux 上运行 Django,并且您有一个视图,并且您希望该视图从名为cmd的子进程返回数据,该子进程对视图创建的文件进行操作,例如:

现在,假设cmd的启动时间很慢,但运行时间非常快,而且它本身没有守护程序模式。我想改进这个视图的响应时间。

我想通过在工作池中启动多个cmd实例,让它们等待输入,并让call_process询问其中一个工作池进程处理数据,从而使整个系统运行得更快。

这实际上是 2 个部分:

第 1 部分。调用cmdcmd等待输入的函数。这可以通过管道来完成,即

第 2 部分。一组在后台运行并等待数据的工作人员。即我们想扩展上面的,以便子进程已经在运行,例如当 Django 实例初始化时,或者这个call_process被第一次调用时,一组这些工人被创建

应该在某处对工作人员进行一些初始化,如下所示:

现在,我上面的内容变成了这样:

现在,问题:

  1. 这行得通吗?(我刚刚将这个从头顶输入到 StackOverflow,所以我确信存在问题,但从概念上讲,它会起作用)

  2. 要寻找哪些问题?

  3. 有更好的选择吗?例如,线程是否也可以正常工作(它是 Debian Lenny Linux)?有没有像这样处理并行进程工作池的库?

  4. 我应该注意与 Django 的交互吗?

谢谢阅读!我希望你和我一样觉得这个问题很有趣。

布赖恩

0 投票
2 回答
13788 浏览

python - 如果stdout = PIPE,我如何找出为什么subprocess.Popen wait() 永远等待?

我有一个写入标准输出和可能标准错误的程序。我想从 python 运行它,捕获标准输出和标准错误。我的代码如下所示:

对于几个程序,这很好用,但是当我添加一个新程序时,新程序会永远挂起。如果我删除stdout=PIPE,程序会将其输出写入控制台并完成,一切都很好。如何确定导致挂起的原因?

在 Windows XP 上使用 python 2.5。该程序不从标准输入读取,也没有任何类型的用户输入(即“按下键”)。

0 投票
1 回答
2844 浏览

python - Python subprocess.Popen - 添加 GCC 标志会导致“无输入文件”错误

我正在构建一个 Python 脚本来自动化我的构建过程,它使用 subprocess.Popen 调用 GCC。我最初的尝试效果很好。

但是,一旦我将其他选项传递给 GCC,我就会收到错误“无输入文件”,如下所示:

任何想法可能导致此问题?