使用python运行windows shell命令

Avi*_*wal 46 python windows shell operating-system

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

Mik*_*ike 62

subprocess.check_output应该替换更新和类似的命令os.system.有关详情,请参阅此页面.虽然我无法在Windows上测试此功能,但以下情况应该有效:

from subprocess import check_output
check_output("dir C:", shell=True)
Run Code Online (Sandbox Code Playgroud)

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

另请注意,在python 3中,现在bytes输出该字符串输出.如果你想把它改成一个字符串,你需要类似的东西

from subprocess import check_output
check_output("dir C:", shell=True).decode()
Run Code Online (Sandbox Code Playgroud)

如有必要,您可以告诉它您的程序输出的编码类型.默认值是utf-8,通常可以正常工作,但其他标准选项在这里.

  • 为此目的使用`[0:-2]`让我感到紧张.如果有人将该代码应用于非Windows上下文中,他们肯定会将明显的`dir C:`改为`ls`或者其他什么.但他们很容易意识到`[0:-2]`应该改为`[0:-1]`.我推荐[`.rstrip()`](https://docs.python.org/2/library/stdtypes.html#str.rstrip),它可以在任何平台上工作(除非你想捕获其他尾随空格),也使得字符串更改背后的原因更加清晰. (7认同)
  • 可以在Win 10中进行一些修改:check_output(“ dir C:\\”,shell = True) (2认同)

Tim*_*ger 13

您将使用os模块系统方法.

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

例如:

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

os.system('python')的例子

  • Sidetip:使用`alt + prtscr`来获取活动窗口的屏幕截图.;) (11认同)

cri*_*aig 12

重构@ 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)
Run Code Online (Sandbox Code Playgroud)


Rah*_*dia 7

简单的导入 os 包并运行下面的命令。

import os
os.system("python test.py")
Run Code Online (Sandbox Code Playgroud)


ccy*_*ccy 6

您可以使用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
Run Code Online (Sandbox Code Playgroud)