使用 python 运行 windows shell 命令

Posted

技术标签:

【中文标题】使用 python 运行 windows shell 命令【英文标题】:Running windows shell commands with python 【发布时间】:2013-01-31 10:41:12 【问题描述】:

我们如何使用 Python 与 OS shell 交互? 我想通过 python 运行 windows cmd 命令。如何实现?

【问题讨论】:

相关:Is it possible to use python as a shell replacement? 【参考方案1】:

简单导入操作系统包并运行以下命令。

import os
os.system("python test.py")

【讨论】:

【参考方案2】:

较新的subprocess.check_output 和类似命令应该替换os.system。有关详细信息,请参阅this page。虽然我无法在 Windows 上对此进行测试(因为我无权访问任何 Windows 机器),但以下应该可以工作:

from subprocess import check_output
check_output("dir C:", shell=True)

check_output 返回命令输出的字符串。或者,subprocess.call 只是运行命令并返回命令的状态(如果一切正常,通常为 0)。

还要注意,在 python 3 中,该字符串输出现在是 bytes 输出。如果要将其更改为字符串,则需要类似

from subprocess import check_output
check_output("dir C:", shell=True).decode()

如有必要,you can tell it 程序输出的编码类型。默认值为utf-8,通常可以正常工作,但其他标准选项为here。

另请注意,@bluescorpion 在 cmets 中表示 Windows 10 需要尾部反斜杠,如 check_output("dir C:\\", shell=True)。需要双反斜杠,因为\是python中的特殊字符,所以必须是escaped。 (另请注意,如果 \ 是字符串的最后一个字符,即使在字符串前面加上 r 也无济于事 - r"dir C:\" 是语法错误,但 r"dir C:\ " 不是。)

【讨论】:

这适用于 Windows 7。谢谢。它确实在字符串末尾返回 \r\n,因此您可能需要使用 [0:-2] 子字符串将其删除。 为此目的使用[0:-2] 让我很紧张。如果有人将该代码应用到非 Windows 上下文中,他们肯定会将明显的 dir C: 更改为 ls 或其他任何内容。但是他们很容易没有意识到应该将[0:-2] 更改为[0:-1]。我推荐.rstrip(),它可以在任何平台上工作(除非你想捕获其他尾随空格),并且还可以使字符串更改背后的原因更加清晰。 @Mikw:我有一个用于部署的 windows 命令。只需一行命令。如何从外部 python3.4 脚本调用它 只需使用上面的代码,但将dir C: 替换为您的单行代码。 稍作修改即可在 Win 10 中使用:check_output("dir C:\\", shell=True)【参考方案3】:

您可以使用subprocess 包,代码如下:

import subprocess
cmdCommand = "python test.py"   #specify your cmd command
process = subprocess.Popen(cmdCommand.split(), stdout=subprocess.PIPE)
output, error = process.communicate()
print output

【讨论】:

【参考方案4】:

重构@srini-beerge 的答案,得到输出和返回码

import subprocess
def run_win_cmd(cmd):
    result = []
    process = subprocess.Popen(cmd,
                               shell=True,
                               stdout=subprocess.PIPE,
                               stderr=subprocess.PIPE)
    for line in process.stdout:
        result.append(line)
    errcode = process.returncode
    for line in result:
        print(line)
    if errcode is not None:
        raise Exception('cmd %s failed, see above for details', cmd)

【讨论】:

【参考方案5】:
import subprocess
result = []
win_cmd = 'ipconfig'(curr_user,filename,ip_address)
process = subprocess.Popen(win_cmd,
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE )
for line in process.stdout:
    print line
result.append(line)
errcode = process.returncode
for line in result:
    print line

【讨论】:

【参考方案6】:

您将使用 os 模块system method。

你只是输入命令的字符串形式,返回值是windows环境变量COMSPEC

例如:

os.system('python') 打开 windows 命令提示符并运行 python 解释器

【讨论】:

附注:使用alt+prtscr 获取活动窗口的屏幕截图。 ;) 感谢您的提示。虽然文档建议使用subprocess module,但我发现这对于简单的任务来说更符合pythonic。

以上是关于使用 python 运行 windows shell 命令的主要内容,如果未能解决你的问题,请参考以下文章

为什么学习Python及Python环境安装

VB 获得窗口句柄

supervisor 安装配置实战

Shel脚本-初步入门之《02 什么是 Shell 脚本》

使用子进程在 Windows 上运行 Python 脚本

使用 python 运行 windows shell 命令