【问题标题】:Python subprocess - run a second command in the new command prompt createdPython 子进程 - 在创建的新命令提示符中运行第二个命令
【发布时间】:2019-07-20 03:25:57
【问题描述】:

Python 3.6.7,Windows 7/10

我必须使用 subprocess.run 一个接一个地运行两个命令。第一个命令打开一个新的命令提示符。下一个命令需要在新创建的命令提示符下运行。使用下面的代码,第二个命令始终在初始命令提示符下运行。这个可以吗?

import subprocess

subprocess.run('first command', shell=True)  #first command opens a new command prompt
subprocess.run('second command', shell=True)  #second command needs to be run in the newly created command prompt

【问题讨论】:

  • 您正在创建两个完全独立的子流程。您想以某种方式将命令作为输入提供给第一个子进程,尽管在 Windows 上可能需要牺牲一个处女并在站立时保持双脚。

标签: python python-3.x subprocess


【解决方案1】:

这取决于您要运行哪些命令,但我认为一种解决方案是创建一个批处理脚本,一个接一个地运行这两个命令。

或者你可以尝试在你的第一个子进程的标准输入上写第二个命令,比如:

pipe = subprocess.Popen('first command', shell=True, stdin=subprocess.PIPE)
pipe.communicate(input='second command')

但我不确定这是否可行,因为该过程将在第一个命令终止后立即完成?

编辑:添加缩进

【讨论】:

  • 请缩进你的代码行。 (添加 4 个空格)
  • @Viper 我尝试了你的建议。不幸的是,第二个命令没有在新的命令提示符下执行。我必须做的一项更改是将 encoding='utf8' 添加到 subprocess.Popen
  • 是的,我就是这么想的。一种解决方案是使用 subprocess 来启动 cmd 然后将您的命令写入它。您可以在此处查看更多详细信息:stackoverflow.com/questions/39721924/…
【解决方案2】:

为什么不通过管道传递命令?

subprocess.run('first command | second command', shell=True)

【讨论】:

  • pipe 我认为是在旧 Windows 中使用的,现在已被 &/&& 取代
猜你喜欢
  • 1970-01-01
  • 2019-05-28
  • 2010-11-30
  • 2018-12-26
  • 2013-08-01
  • 1970-01-01
  • 2015-10-29
相关资源
最近更新 更多