Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python执行windows cmd函数_Python_Windows_Function_Command Line - Fatal编程技术网

Python执行windows cmd函数

Python执行windows cmd函数,python,windows,function,command-line,Python,Windows,Function,Command Line,我知道您可以使用子流程通过Python脚本运行Linux终端命令 subprocess.call(['ls', '-l']) # for linux 但是我找不到在windows上做同样事情的方法 subprocess.call(['dir']) # for windows 使用Python而不进行大量修补是否可能 我应该坚持使用传统的批处理文件吗?dir不是一个文件,它是一个内部命令,因此shell关键字必须设置为True subprocess.call(["dir"

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

subprocess.call(['ls', '-l'])    # for linux
但是我找不到在windows上做同样事情的方法

subprocess.call(['dir'])         # for windows
使用Python而不进行大量修补是否可能


我应该坚持使用传统的批处理文件吗?

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

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

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

import os

os.system("windows command")
例:日期

os.system("date")

首先,要获得目录列表,您应该使用。如果改为调用
dir
,则必须解析其输出以使用它,这是大量不必要的工作,而且容易出错


现在,

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

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

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

  • 使用
    shell=True
    选项(通过系统shell执行命令行):

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

  • 在第二种情况下,
    cmd
    将执行它通常会执行的任何shell转换(例如,将行拆分为参数、取消引用、环境变量扩展等)。所以特别是,如果它们碰巧包含任何空格和
    cmd
    特殊字符和/或关键字
  • shell=True
    使用“默认系统shell”(在Windows中通过
    COMSPEC
    环境变量指向),因此如果用户重新定义了它,您的程序将异常运行

ipconfig
是一个Windows命令。这应该行得通(在我的电脑上也行)。为什么你不能在windows上做同样的事情呢?这是一个windows命令。另外,如果希望使用
check\u output(“ipconfig”)
输出,可以使用
shell=True
check\u output(“ipconfig”,shell=True)
一些Windows命令内置在shell中,例如
dir
。您需要运行命令进程本身:
'cmd.exe/c dir'
。编辑:或者按照@PadraicCunningham的建议去做。如果你只是想得到一个文件列表,你应该使用
os.listdir
或者
glob.glob
,而不是去做
dir
os.popen()
的文档说明:由于版本2.6,此函数已经过时。使用模块。特别检查该部分。
subprocess.check_call(['cmd','/c','dir','/s'])
subprocess.check_call('dir /s', shell=True)