如何在subprocess.run中使用creationflags = CREATE_NO_WINDOW?

问题描述 投票:1回答:1

我正在尝试创建一个简单的python / tkinter GUI来从Windows运行cygwin命令。

为了避免获得命令窗口,我正在使用pythonw.exe启动我的python脚本。

这是运行cygwin命令的代码:

def exec_ls():
    clear_log(log)
    print_log(log, "*** Running ls -lsa ***\n")
    s = subprocess.run(
        ["C:/cygwin/bin/ksh.exe", "-c", ". /etc/profile; ls -1 c:/test"],
        stdout=PIPE,
        stderr=STDOUT,
    )
    print_log(log, s.stdout)
    print_log(log, "\n*** END ***")

这成功运行,但是当调用exec_ls()时,空命令窗口会闪烁。

要删除此窗口的出现,我尝试使用creationflags如下:

def exec_ls():
    clear_log(log)
    print_log(log, "*** Running ls -lsa ***\n")
    s = subprocess.run(
        ["C:/cygwin/bin/ksh.exe", "-c", ". /etc/profile; ls -1 c:/test"],
        stdout=PIPE,
        stderr=STDOUT,
        creationflags=CREATE_NO_WINDOW,
    )
    print_log(log, s.stdout)
    print_log(log, "\n*** END ***")

但后来我没有得到命令窗口,但命令也没有运行(没有输出)。

我做错了什么?

最好的祝福

python-3.x subprocess cygwin
1个回答
0
投票

我发现了问题:缺少CREATE_NO_WINDOW的导入,但由于没有命令窗口,我无法看到相应的错误消息。

import subprocess
from subprocess import PIPE, STDOUT, CREATE_NO_WINDOW

我通过从命令窗口而不是从我创建的快捷方式使用pythonw.exe运行我的脚本来找到它。

© www.soinside.com 2019 - 2024. All rights reserved.