Python执行windows cmd函数

Python execute windows cmd functions

我知道可以使用子进程通过python脚本运行Linux终端命令

1
subprocess.call(['ls', '-l'])    # for linux

但是我找不到在窗户上做同样事情的方法

1
subprocess.call(['dir'])         # for windows

使用python而不进行繁重的修补是可能的吗?

我应该坚持使用老式的批处理文件吗?


试试这个

导入操作系统

os.system("windows命令")

为日期

操作系统("日期")


dir不是一个文件,它是一个内部命令,因此shell关键字必须设置为true。

1
subprocess.call(["dir"], shell=True)


几乎每个人的答案都是对的,但似乎我可以使用os.popen——varStr = os.popen('dir /b *.py').read()来做我需要的事情。


首先,要获得目录列表,您应该使用os.listdir()。如果您改为调用dir,则必须解析它的输出以使用它,这是许多不必要的工作,而且很容易出错。

现在,

dir是一个cmd.exe内置命令,它不是一个独立的可执行文件。cmd.exe本身就是实现它的可执行文件。

因此,您有两种选择(如果需要获取输出而不是打印输出,请使用check_output而不是check_call):

  • 使用cmd/C开关(执行命令并退出):

    1
    subprocess.check_call(['cmd','/c','dir','/s'])
  • 使用shell=TruePopen()选项(通过系统外壳执行命令行):

    1
    subprocess.check_call('dir /s', shell=True)

第一种方法是推荐的方法。那是因为:

  • 在第二种情况下,cmd将执行它通常会执行的任何shell转换(例如,将行拆分为参数、不引用、环境变量扩展等)。所以,你的论点可能会突然变成另一种可能有害的东西。特别是,如果它们恰好包含任何空格和cmd特殊字符和/或关键字。
  • shell=True使用"默认系统shell"(在windows的情况下通过COMSPEC环境变量指向),因此如果用户重新定义了它,您的程序将异常运行。