如何使用 Python 在会话模式下使用 cmd?
How to work with cmd in session mode using Python?
问题:是否有任何选项可以使用子进程或其他模块来保持会话?
它每次只运行一条指令或命令。
我找不到任何直接的解决方案。为什么它只能这样工作?
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)
>>>
但你的实际问题是你是否可以 'hold the session'。
也就是说,如果我理解正确的话,在 shell 中执行一些命令,在这些命令完成后保持 shell 运行,而你在你的脚本生成额外的命令,然后将这些新命令发送到相同的旧 shell
是的,这是可能的。
您可以使用 subprocess.Popen()
生成交互式 shell(即 shell 是要执行的命令)
并将实际命令写入它的标准输入并从标准输出读取结果
如果这听起来很复杂:是的!
例如正确的错误处理意味着解析由 shell 编辑的文本 return,而不是简单地检查同步调用的 return 代码。即使检测您的命令是否已完成,也需要监控 shell stdout/stderr
上出现的内容
您不想走异步之路。
同步调用外部命令(如subprocess.run()
),中间没有任何shell,就简单多了。
我又试了一次,好像有用!持有session!!
我用过:
Popen("workon Universal", shell=True) # 1
Popen("pip install termcolor") # 2 without shell=True
最后在“通用”虚拟环境上安装了一个模块。我可以无休止地继续 Popen(3)、Popen(4)。
同样适用于 运行()。
这一切都是关于正确使用“shell=True”属性。
我想这就是我寻找的解决方案。它对所有命令和 sessions 都是通用的。这很难理解,google 或 youtube 上没有任何示例。
谢谢!
问题:是否有任何选项可以使用子进程或其他模块来保持会话? 它每次只运行一条指令或命令。 我找不到任何直接的解决方案。为什么它只能这样工作? 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)
>>>
但你的实际问题是你是否可以 'hold the session'。
也就是说,如果我理解正确的话,在 shell 中执行一些命令,在这些命令完成后保持 shell 运行,而你在你的脚本生成额外的命令,然后将这些新命令发送到相同的旧 shell
是的,这是可能的。
您可以使用 subprocess.Popen()
生成交互式 shell(即 shell 是要执行的命令)
并将实际命令写入它的标准输入并从标准输出读取结果
如果这听起来很复杂:是的! 例如正确的错误处理意味着解析由 shell 编辑的文本 return,而不是简单地检查同步调用的 return 代码。即使检测您的命令是否已完成,也需要监控 shell stdout/stderr
上出现的内容您不想走异步之路。
同步调用外部命令(如subprocess.run()
),中间没有任何shell,就简单多了。
我又试了一次,好像有用!持有session!! 我用过:
Popen("workon Universal", shell=True) # 1
Popen("pip install termcolor") # 2 without shell=True
最后在“通用”虚拟环境上安装了一个模块。我可以无休止地继续 Popen(3)、Popen(4)。 同样适用于 运行()。 这一切都是关于正确使用“shell=True”属性。 我想这就是我寻找的解决方案。它对所有命令和 sessions 都是通用的。这很难理解,google 或 youtube 上没有任何示例。 谢谢!