繁体   English   中英

Subprocess.Popen():隐藏cmd shell

[英]Subprocess.Popen() : hide the cmd shell

我试图在启动时调用可执行文件,它将调用另一个可执行文件本身。 对于第一部分,我只是将可执行文件的路径添加到HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run ,这有效,我的可执行文件在启动时被调用。

后者包含以下这些内容:

startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
startupinfo.wShowWindow = subprocess.SW_HIDE
proc = subprocess.Popen(command, startupinfo=startupinfo)

但是,计算机启动时会弹出命令shell(cmd)。 一切正常,但它是可见的而不是隐藏的...所以基本上,我如何隐藏这个命令shell?

使用ProcessExplorer ,我有以下层次结构:

+ System
|_ Interrupts
|_ smss.exe
    |_ some processes...
+ explorer.exe
    |_ some processes...
|_ MYSCRIPT.EXE

这是我尝试实现的顺序:

  • 我创建了一个ISO文件,其中包含我想在VM上运行的所有Python可执行文件。 其中一个( master.exe )调用其他人。
  • 我创建了一个自动挂载后者的VM
  • 已准备好的VM具有调度D:\\master.exe的计划任务
  • master.exe (以及其他我们不关心的任务)将值D:\\myscript.exeHKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run
  • VM重新启动
  • 运行D:\\myscript.exe (它工作正常并且有效),但它确实在命令提示符下运行,我希望它是不可见的。

这是Python程序员遇到的典型问题 - 因此,Python本身提供了一个解决方案。 它已被问过多次,例如, 在这里 ,但对你来说,问题有点复杂。

这是关于你是否使用python.exepythonw.exe来运行你的脚本。 对于第一个,打开控制台,第二个不打开。

在使用编译脚本时,必须告诉“编译器”您要使用哪个版本。 假设您正在使用py2exe,您可以在SO上查看此帖子 这里详细解释了如何继续。

正在打开的控制台窗口可能属于运行脚本的Python进程。 向我们显示运行脚本的注册表中的条目。

如果您运行控制台程序,Windows将创建一个控制台窗口。 “python.exe”是一个控制台程序。

如果您不想要控制台窗口,可以使用“pythonw.exe”而不是“python.exe”运行Python脚本。

您可以将其编译为exe格式。 当我遇到这个问题时,我使用py2exe将python文件编译为隐藏的可执行文件。

您所要做的就是更改setup.py文件(用于编译)

setup(console=['__main__.py'], options={"py2exe":{"includes":["sip"]}})

setup(windows=['__main__.py'], options={"py2exe":{"includes":["sip"]}})

我有同样的问题,我使用Pyinstaller

Pyinstaller是一个智能的跨平台工具,可将.py文件编译为独立的可执行文件。

通过以下方式安装

pip install pyinstaller (更多信息,请点击此处

使用以下命令隐藏控制台(使脚本成为进程):

pyinstaller yourfilename.py -F --windowed

(使用“-F”标志,您将获得单个.exe文件,并使用“--windowed”标志控制台将被隐藏)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM