在Windows上用Python调整控制台窗口大小的问题

在Windows上用Python调整控制台窗口大小的问题,python,windows,python-2.7,Python,Windows,Python 2.7,我一直对这段代码有疑问 def changeWindowSize(): cmd = "mode con: cols=107 lines=50" resize = os.system(cmd) subprocess.Popen(resize) 它确实有效,但随后也会生成回溯 以下是回溯: 调用os.system就足够了: def changeWindowSize(): cmd = "mode con: cols=107 lines=50" os.system(c

我一直对这段代码有疑问

def changeWindowSize():
   cmd = "mode con: cols=107 lines=50"
   resize = os.system(cmd)
   subprocess.Popen(resize)
它确实有效,但随后也会生成回溯

以下是回溯:

调用
os.system
就足够了:

def changeWindowSize():
    cmd = "mode con: cols=107 lines=50"
    os.system(cmd)
如果要使用
subprocess.Popen
,请使用
shell=True调用:

def changeWindowSize():
    cmd = "mode con: cols=107 lines=50"
    subprocess.Popen(cmd, shell=True)
    #  OR  subprocess.call(cmd, shell=True)


脚本失败,因为它将整数对象(返回值为
os.system
)传递给
subprocess.Popen
,后者接受列表或字符串作为第一个参数。

shell=True
。它是一个外部PE可执行文件,但由于历史原因,扩展名是.com而不是.exe,例如
subprocess.call('mode.com con cols=107 lines=50')
。作为参考,chcp.com、format.com、more.com和tree.com也是如此。在64位窗口中,这些都是位于
%SystemRoot%\System32
中的64位PE可执行文件。他们只是碰巧拥有旧的.com扩展名,而旧的MS-DOS 16位.com文件类型使用了旧的.com扩展名。除了名称和命令行界面(大多数情况下),它们在实现方面与原始MS-DOS实用程序没有任何共同之处。它们是Win32控制台应用程序。