我想在后台打开一个进程并与之交互,但这个进程在Linux和Windows中都应该是不可见的.在Windows中,您必须使用STARTUPINFO执行某些操作,而这在Linux中无效:
ValueError:仅在Windows平台上支持startupinfo
有没有比为每个操作系统创建单独的Popen命令更简单的方法?
if os.name == 'nt':
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
proc = subprocess.Popen(command, startupinfo=startupinfo)
if os.name == 'posix':
proc = subprocess.Popen(command)
Run Code Online (Sandbox Code Playgroud) 我有一个带有GUI的程序,通过Popen调用运行外部程序:
p = subprocess.Popen("<commands>" , stdout=subprocess.PIPE , stderr=subprocess.PIPE , cwd=os.getcwd())
p.communicate()
Run Code Online (Sandbox Code Playgroud)
但是无论我做什么,都会弹出控制台(我也尝试将NUL传递给文件句柄).如果没有得到我调用的二进制文件来释放它的控制台,有没有办法做到这一点?
使用subprocess.call或者subprocess.Popen,执行shell命令会使shell窗口快速显示并消失.
如何在没有shell窗口的情况下运行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)
Run Code Online (Sandbox Code Playgroud)
但是,计算机启动时会弹出命令shell(cmd).一切正常,但它是可见的而不是隐藏的...所以基本上,我如何隐藏这个命令shell?
使用时ProcessExplorer,我有以下层次结构:
+ System
|_ Interrupts
|_ smss.exe
|_ some processes...
+ explorer.exe
|_ some processes...
|_ MYSCRIPT.EXE
Run Code Online (Sandbox Code Playgroud)
这是我尝试实现的顺序:
master.exe)调用其他人.D:\master.exemaster.exe(这是不是在这里我们所关心的其他任务)增加值D:\myscript.exe到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunD:\myscript.exe 运行(并且它工作正常并且有效),但它确实在命令提示符下运行,我希望它是不可见的.