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

python - 如何从子进程中获取环境?

我想通过python程序调用一个进程,但是,这个进程需要一些由另一个进程设置的特定环境变量。如何获取第一个进程环境变量以将它们传递给第二个?

这是程序的样子:

但是要处理的过程不共享相同的环境。请注意,这些程序不是我的(第一个是又大又丑的 .bat 文件,第二个是专有软件)所以我不能修改它们(好吧,我可以从 .bat 中提取我需要的所有东西,但它非常精巧)。

注意:我使用的是 Windows,但我更喜欢跨平台解决方案(但我的问题不会发生在类 Unix 上......)

0 投票
2 回答
1368 浏览

ruby - 查找当前标准输出或如何将输出重定向回控制台

我正在使用 Ubuntu 9.04 x64 并且,

我有一个文件startup.rb,我在其中调用sudo bash,因此我总是有一个根控制台来执行管理任务,而无需每 15 分钟左右输入密码。

该脚本由另一个脚本Startup.rb调用,两个文件的内容如下 -

文件~/Startup.rb

文件~/startup.rb

我已将~/Startup.rb文件包含在启动应用程序列表中。

现在的问题是,在 的终端中sudo bash,如果我输入一些内容并期望得到一些输出,我什么也得不到。所以如果我写echo hello world,我不会得到任何输出。这让我相信sudo bash命令的标准输出(stdout)不是控制台。

所以,我想知道为什么会这样?我怎么知道当前的标准输出路径?或者如何将标准输出恢复到我当前的控制台?

- 谢谢

0 投票
7 回答
34773 浏览

python - subprocess:删除Windows中的子进程

在 Windows 上,subprocess.Popen.terminate调用 win32 的TerminalProcess. 但是,我看到的行为是我试图终止的进程的子进程仍在运行。这是为什么?如何确保该进程启动的所有子进程都被杀死?

0 投票
6 回答
6105 浏览

python - python子进程

我通常在 Linux 中(手动)执行 Fortran 文件:

  1. 连接到服务器
  2. 转到特定文件夹
  3. ifort xxx.for -o xxx && ./xxx(其中“xxx.for”是我的 Fortran 文件,“xxx”是 Fortran 可执行文件)

但是我需要从python(我是初学者)调用我的fortran文件(xxx.for),所以我使用subprocess了以下命令:

但我得到一个错误,我不确定出了什么问题。这是完整的代码:

如何编写一个执行上述所有 3 个步骤并避免出现错误的 python 程序?

0 投票
2 回答
11013 浏览

python - 在 Python 中禁用 subprocess.Popen 的控制台输出

我在 Windows 上运行 Python 2.5,并且在我拥有的代码中的某处

通过pid杀死IE窗口。问题是,如果没有在 Popen 中设置管道,我仍然会输出到控制台 - 成功:PID 2068 的进程已终止。我将它调试到 subprocess.py 中的 CreateProcess,但不能从那里开始。

任何人都知道如何禁用此功能?

0 投票
3 回答
21509 浏览

python - 为什么带有 shell=True 的 subprocess.Popen() 在 Linux 和 Windows 上的工作方式不同?

当使用subprocess.Popen(args, shell=True)运行“ gcc --version”(仅作为示例)时,在 Windows 上我们得到:

所以它很好地打印出我所期望的版本。但在 Linux 上,我们得到这个:

因为 gcc 还没有收到这个--version选项。

文档没有具体说明在 Windows 下 args 应该发生什么,但它确实说,在 Unix 上,“如果 args 是一个序列,第一项指定命令字符串,并且任何额外的项目都将被视为额外的 shell 参数。” 恕我直言,Windows 方式更好,因为它允许您将Popen(arglist)呼叫视为与呼叫相同Popen(arglist, shell=True)

为什么这里有 Windows 和 Linux 的区别?

0 投票
1 回答
4949 浏览

python - Python 子进程 - 将 stdout/err 重定向到两个地方

我有一个小的 python 脚本,它使用subprocess. 我想将 stdout 和 stderr 重定向到日志文件和终端。

如何才能做到这一点?

0 投票
4 回答
8602 浏览

python - python子进程模块:循环子进程的标准输出

我有一些使用 subprocess 模块运行的命令。然后我想循环输出的行。文档说不要做 data_stream.stdout.read 我不是,但我可能正在做一些调用它的事情。我正在像这样循环输出:

这是否会导致死锁,例如从 data_stream.stdout 读取,或者是否为这种循环设置了 Popen 模块,以便它使用通信代码但为您处理它的所有调用?

0 投票
4 回答
4654 浏览

python - subprocess.call 的管道输出到进度条

我正在使用 growisofs 通过我的 Python 应用程序刻录 iso。我在两个不同的文件中有两个类;GUI() (main.py) 和 Boxblaze() (core.py)。GUI() 构建窗口并处理所有事件和内容,而 Boxblaze() 具有 GUI() 调用的所有方法。

现在,当用户选择了要刻录的设备和要刻录的文件时,我需要调用一个调用以下命令的方法:`

此命令应提供类似于以下内容的输出:

此命令在 Boxblaze() 中名为 burn() 的方法中运行。它看起来很简单:

现在我的问题如下:

  1. 如何从输出中获取进度(括号中的百分比)并将进度条设置为“跟随”该进度?我的进度条在 GUI() 类中调用,如下所示:

    获取 = builder.get_object

    self.progress_window = get("progressWindow")

    self.progressbar = get("进度条")

  2. 我是否必须在单独的线程中运行此命令才能使 GUI 保持响应(以便我可以更新进度条并允许用户根据需要取消刻录)?如果是这样,我该怎么做并且仍然能够将进度传递到进度条?


如果您有兴趣,可以在 Launchpad 上找到完整的代码。如果您安装了集市,只需运行:

哦,如果你想知道,这个应用程序只适用于 Linux - 所以不要担心跨平台兼容性。

0 投票
2 回答
1189 浏览

linux - <() 在 Bash 中做了什么?

在superuser.com 上的帖子回答中,我们看到

将文件 abc 和 bcd 排序,然后将它们发送到加入。这导致了一个编程问题,更适合stackoverflow。

这是如何运作的?这个 <() 结构到底是什么?它叫什么?

如果 (sort abc) 是在 abc 上运行 sort 并返回输出的合法调用,为什么我们需要<?

即下面两行是等价的

是语法错误。请给我线索!