如何使用Python在会话模式下使用cmd?

问题描述

问题:是否有使用Subprocess或else模块举行会议的选项? 每次仅运行一条指令或命令。 我找不到任何直接的解决方案。为什么只有这样呢? 对于Windows,Linux和Mac OS-s,这是同样的问题。

示例1。 我需要在具有管理员权限的cmd中进行一些工作。

from subprocess import run,Popen,call
run('net user Administrator /active: yes',shell=True)
run('pip install [some module]',shell=True)  # or "powershell -command [some command]"

示例2。 我需要使用虚拟环境模块并进入所需的环境。

run(["workon","Universal"]
run("[some changes]")

一个CMD模块,但它看起来与系统cmd-terminal隔离,就像您自己创建的CLI一样,并且用途不同。

请不要回答有关bash脚本,获取管理员权限的其他选项,或有关从cmd本身启动脚本的信息,例如“>“ python main.py”。正在谈论按顺序习惯性地执行CMD中的命令,以及Python如何做到这一点,保持cmd会话或不能这样做。

解决方法

我想您想保留获得的管理权限。 我不知道Windows,不要使用它。 但是,如果我在Linux上尝试类似的操作,则只需键入一次管理员密码:

$ python3
Python 3.8.2 (default,Jul 16 2020,14:00:26) 
[GCC 9.3.0] on linux
Type "help","copyright","credits" or "license" for more information.
>>> import subprocess
>>> subprocess.run("sudo ls",shell=True)
[sudo] password for <me>: 
a.txt  b.txt
CompletedProcess(args='sudo ls',returncode=0)
>>> subprocess.run("sudo ls",shell=True)
a.txt  b.txt
CompletedProcess(args='sudo ls',returncode=0)
>>> 

但是您的实际问题是,是否可以“举行会议”。

也就是说,如果我对您的理解正确,请在外壳中执行一些命令,在这些命令完成后保持外壳运行,同时在脚本中执行其他操作以生成额外的命令,然后将这些新命令发送到相同的旧壳

是的。

您可以使用subprocess.Popen()产生一个交互式shell(即该shell是要执行的命令) 并向其标准输入实际命令并从标准输出读取结果

这听起来很复杂:是的! 例如适当的错误处理意味着将shell返回的文本进行解析,然后比较一下是否为同步调用检查了返回代码。即使检测命令是否完成,也需要监视shell stdout / stderr

上显示的内容。

您不想走异步道路。 对外部命令(例如subprocess.run())的同步调用非常简单。

,

我又尝试了一次,看来很有效!举行会议! 我用过:

Popen("workon Universal",shell=True)   #  1
Popen("pip install termcolor")   # 2 without shell=True

最后,在“通用”虚拟环境上安装了一个模块。我可以无休止地继续Popen(3),Popen(4)。 与run()相同。 使用“ shell = True”属性就可以了。 我想那是我寻找的解决方案。它对于所有命令和会话都是通用的。很难理解,在google或youtube上没有任何示例。 谢谢!