问题标签 [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 回答
43578 浏览

python - 如何在 Python 中运行另一个脚本而不等待它完成?

我正在为允许他运行特定作业的用户创建一个小仪表板。我正在使用 Django,所以我希望他能够单击链接以启动作业,然后将页面返回给他,并显示作业正在运行的消息。工作的结果将稍后通过电子邮件发送给他。

我相信我应该使用subprocess.Popen,但我不确定。所以在伪代码中,这就是我想要做的:

0 投票
5 回答
2877 浏览

winapi - 如何在等待另一个程序完成时更新 win32 应用程序 gui?

我目前正在使用 Win32 GUI 应用程序中的 CreateProcess/WaitForSingleObject 来启动一个处理软件许可问题的小型 GUI 应用程序。这一切都很好,但它基本上挂起“父”应用程序,同时等待许可应用程序完成其工作。在此期间,不会发生对父应用程序的更新,并且如果实用程序应用程序窗口移动,它会以难看的白色方块结束。

此外,由于某些奇怪的原因,在实用程序应用程序运行时,如果我将该应用程序中的某些内容复制到剪贴板,它就会挂起。我还没有弄清楚为什么,但只有在我等待应用程序从父应用程序中完成时才会发生这种情况。

所以我在想,如果我可以让父应用程序在等待我的另一个应用程序完成时处理它的事件,它可能会解决这两个问题。

那么,是否有替代 CreateProcess/WaitForSingleObject 来处理 UI 更新?

0 投票
6 回答
4590 浏览

python - 在 Python 2.5 中使用 Python 2.6 子进程模块

我想使用 Python 2.6 的子进程版本,因为它允许Popen.terminate()函数,但我坚持使用 Python 2.5。在我的 2.5 代码中是否有一些相当干净的方法来使用模块的较新版本?某种from __future__ import subprocess_module

0 投票
8 回答
141926 浏览

python - 从 python 脚本以超级用户身份运行命令

因此,我正在尝试使用子进程从 python 脚本中以超级用户身份运行一个进程。在 ipython shell 中类似于

工作正常,但只要我把它粘贴到一个脚本中,我就开始得到:sudo: apach2ctl: command not found.

我猜这是由于 sudo 在 ubuntu 上处理环境的方式。(我也试过了sudo -E apche2ctl restartsudo env path=$PATH apache2ctl restart没用)

所以我的问题基本上是,如果我想以apache2ctl restart超级用户身份运行,在需要时提示用户输入超级用户密码,我应该怎么做呢?我无意在脚本中存储密码。

编辑:

我尝试将命令作为字符串传递并标记为列表。在 python 解释器中,我会用一个字符串正确地得到密码提示(在我原来的问题中仍然不能在 python 脚本中工作),一个列表只是给出了 sudo 的帮助屏幕。

编辑2:

所以我收集到的是,虽然当 shell=True 时 Popen 会像字符串一样处理一些命令,但它需要

没有 'shell=True' 让 sudo 工作。

谢谢!

0 投票
3 回答
2476 浏览

python - Python 持久化 Popen

有没有办法在 Popen 的同一个“会话”中进行多次通话?例如,我可以通过它拨打电话,然后再拨打另一个电话,而不必将命令连接成一个长字符串吗?

0 投票
4 回答
2753 浏览

python - 为包装好的 MySQL 提供密码

问候。

我写了一个在子进程中调用 MySQL 的小 Python 脚本。[是的,我知道正确的方法是使用 MySQLdb,但在 OS X Leopard 下编译它很痛苦,如果我想在不同架构的计算机上使用该脚本,可能会更痛苦。] 子进程技术有效,前提是我在启动进程的命令中提供密码;但是,这意味着机器上的其他用户可以看到密码。

我写的原始代码可以在这里看到。

下面的这个变体非常相似,尽管我将省略测试例程以使其更短:

我怀疑 MySQL 密码提示实际上不在 stdout(或 stderr)上,尽管我不知道那可能是怎么回事,或者这是否意味着我可以捕获它。

在提供密码之前,我确实尝试过先读取输出,但它没有用。我也试过传递密码

同样,如果我在命令行上提供密码(因此在“Popen”和“communicate”函数之间没有代码)我的包装函数可以工作。


两个新想法,几个月后:

  1. 使用pexpect可以让我提供密码。它模拟一个 tty 并获得所有输出,即使是绕过 stdout 和 stderr 的输出。

  2. 有一个名为MySQL Connector/Python的项目,处于早期 alpha 阶段,它将允许提供一个纯 Python 库来访问 MySQL,而无需您编译任何 C 代码。

0 投票
2 回答
559 浏览

python - python:使用call.subprocess在写入文件后使用文件的问题

在 python 中,我试图编写一个脚本来编辑文本文件,然后运行使用这些文本文件的可执行文件。它基本上需要 1)打开和读取/写入文本文件,以及 2)使用我刚刚在 bash 命令中编写的文件。这是一个简单的例子:

由于某种原因,该subprocess.call命令没有显示 junk01.txt 文件的内容。但是,在我运行此代码并输入cat junk01.txtbash 后,文件已正确写入。同样,我发现在我打开、写入和关闭文本文件然后尝试在可执行文件中使用它之后,该文件还没有被写入。关于为什么会这样以及我能做些什么来解决它的任何解释?

0 投票
10 回答
177647 浏览

python - 如何从 Python 异步运行外部命令?

我需要从 Python 脚本异步运行 shell 命令。我的意思是我希望我的 Python 脚本在外部命令关闭并执行它需要做的任何事情时继续运行。

我读了这篇文章:

在 Python 中调用外部命令

然后我开始进行一些测试,看起来os.system()可以完成我在命令末尾使用的工作,&这样我就不必等待它返回。我想知道这是否是完成此类事情的正确方法?我试过commands.call()了,但它对我不起作用,因为它阻止了外部命令。

请让我知道是否os.system()建议使用此方法,或者我是否应该尝试其他路线。

0 投票
4 回答
8521 浏览

python - Python,将 Popen 的流重定向到 python 函数

我是 python 编程的新手。我有这个问题:我有一个文本文件列表(压缩和未压缩),我需要: - 连接到服务器并打开它们 - 打开文件后,我需要获取他的内容并将其传递给另一个我写的python函数

为了详细说明这些文件中包含的信息。该函数的目的是使用 3 行仅在 1 行中写入存储在这些文件中的日志......该函数在从我的本地计算机读取的文件上运行良好,但我无法弄清楚如何连接到远程服务器和创建这些单行日志而不将每个文件的内容存储到一个字符串中,然后使用该字符串......我用来连接到远程机器的命令是:

retList[0] 和 retList[2] 是 user@remote 和我必须访问的文件夹名称

提前感谢大家!

更新:

我的问题是我必须先建立一个 ssh 连接:

我需要打开的所有文件都存储在一个列表中,fileList[],其中一部分是压缩的(.gz),一部分只是文本文件!我已经尝试了你在 bot 之前展示的所有程序,但没有任何效果......我想我必须修改 Popen 函数的第三个参数,但我不知道该怎么做!有没有人可以帮助我???

0 投票
4 回答
11919 浏览

python - 为什么 subprocess.Popen(...) 不总是返回?

我希望这是一个简单的python问题。

当我在 python 解释器中尝试以下操作时:

它将运行ls -l,但我需要点击“return”以获得新的 >>> 提示。

但是,当我尝试以下操作时:

然后ls -l将立即运行 >>> 提示符。

另一种变体:

这会给我一个立即的新提示。

最后一个例子最接近我想要的。我的目标是启动一个子进程,等待它完成,然后通过引用在我的父进程中使用它的 stdout,p.stdout同时让 stderr 打印到其他地方。

现在在我的实际应用程序中,最后一个版本只是挂在: p = subprocess.Popen(cmd, stdout=subprocess.PIPE)有或没有p.wait().

谢谢,

查理