【问题标题】:Use CMD inside Python在 Python 中使用 CMD
【发布时间】:2021-07-19 18:13:45
【问题描述】:

大家晚上好,这是我第一次在这里发帖。

我有很多代码需要在CMD中运行,但是我不擅长用CMD编码,所以我想用python来修改我不得不经常重复的代码

例如

temp1 = ["C:/dir1", "C:/dir2", "C:/dir3"]
temp2 = ["1", "2", "3"]
for i, p in zip(temp1, temp2):
    os.system('7z -a "{}" C:/target/output"{}" -m5'.format(i, p))

使用我的代码,我还需要看到Shell提示,因为我做的一些代码显示了很长的终端数据输出,我想主动监控,我更喜欢在python终端中看到它作为输出,或打印或类似的东西。

先谢谢了,这是我的第一篇文章,希望清楚。

【问题讨论】:

  • 那么,命令 %comspec% 应该在 CMD 窗口中使用吗?我正在python上尝试它,它返回一个“0”但就是这样。我总是使用 jupyter notebook,不确定它是否是最好的方法。你能用我的代码创建一个python脚本吗?或类似的例子。
  • 运行cmd.exe(隐式通过os.system())只是为了运行另一个可执行文件(7z.exe)有什么意义,为什么不直接运行后者(通过subprocess.call())?

标签: python-3.x powershell cmd


【解决方案1】:

os.system() 在 Windows 上隐式使用 cmd.exe(通过将指定的命令行传递给 cmd /c)并将命令的输出隐式传递到标准输出。

因此,您的命令原则上应该可以工作,尽管我建议将目标路径 全部引用 ("C:/target/output{}"),而不仅仅是替换部分 (C:/target/output"{}")[ 1]:

import os

temp1 = ["C:/dir1", "C:/dir2", "C:/dir3"]
temp2 = ["1", "2", "3"]
for i, p in zip(temp1, temp2):
    os.system('7z -a "{}" "C:/target/output{}" -m5'.format(i, p))

如果您从 GUI 脚本(通过 pythonw.exe / pyw.exe 调用的脚本)运行此代码,则会为每个 @987654329 创建控制台窗口@ call 在命令完成时自动关闭,这不允许您在事后检查输出。要解决这个问题,您有两种选择:

  • & pause 附加到命令中,该命令在关闭控制台窗口之前等待按键
import os

temp1 = ["C:/dir1", "C:/dir2", "C:/dir3"]
temp2 = ["1", "2", "3"]
for i, p in zip(temp1, temp2):
    os.system('7z -a "{}" "C:/target/output{}" -m5 & pause'.format(i, p))
  • 通过cmd /k调用您的命令,该命令启动交互式cmd.exe会话,在命令完成后保持打开状态;请注意,每个此类会话随后阻止您的 Python 脚本的进一步执行,直到您手动关闭运行持久 cmd.exe 会话的控制台窗口
import os

temp1 = ["C:/dir1", "C:/dir2", "C:/dir3"]
temp2 = ["1", "2", "3"]
for i, p in zip(temp1, temp2):
    os.system('cmd /k " 7z -a "{}" "C:/target/output{}" -m5 "'.format(i, p))

注意不寻常的引用(外部"..." 字符串嵌入 " 没有转义),这是cmd.exe 支持的,但是。


[1] 通常,这不会产生影响,但您永远不知道程序如何在 Windows 上解析它们的命令行,并且完整的双引号参数更有可能起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-16
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    • 2016-08-16
    • 2017-02-11
    相关资源
    最近更新 更多