我写了一些如下的陈述:
os.system(cmd) #do something
subprocess.call('taskkill /F /IM exename.exe')
Run Code Online (Sandbox Code Playgroud)
两者都会弹出一个控制台.
如何阻止它弹出控制台?
我有一个Python脚本,它作为Windows服务运行.该脚本分叉另一个进程:
with subprocess.Popen( args=[self.exec_path], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) as proc:
Run Code Online (Sandbox Code Playgroud)
这会导致以下错误:
OSError: [WinError 6] The handle is invalid
File "C:\Program Files (x86)\Python35-32\lib\subprocess.py", line 911, in __init__
File "C:\Program Files (x86)\Python35-32\lib\subprocess.py", line 1117, in _get_handles
Run Code Online (Sandbox Code Playgroud) 如果我将我的代码文件保存为.pyw,则不会出现控制台窗口 - 这就是我想要的 - 但如果代码包含调用os.system,我仍然会得到一个讨厌的控制台窗口.我认为这是由呼叫引起的os.system.有没有办法从我的.pyw脚本中执行其他文件而根本不提高控制台窗口?
可能重复:
在没有控制台的情况下使用Popen在pythonw中运行进程
如何从Python(2.7)中的衍生进程中消除Windows控制台?
我有一个Python程序,它调用一个单独的数字运算程序(用C语言编写)作为子进程多次(使用subprocess.check_call).它在Linux上运行良好,除了一件小事之外,它在Windows上运行良好:每次调用子进程时,都会创建一个命令提示符窗口,然后在子进程退出时很快就会被销毁.
这根本不会影响计算,但是它非常烦人,因为这个窗口一直在屏幕上闪烁,这使得在计算机上执行其他操作很困难,因为新的命令提示符窗口可以窃取键盘焦点.
如何简单地执行子进程(没有GUI),并阻止创建命令提示符窗口?
我在Windows上使用python 2.7来使用dcraw和PIL自动执行批量RAW转换.
问题是我每次运行dcraw时都会打开一个Windows控制台(每隔几秒就会发生一次).如果我使用.py运行脚本它不那么烦人,因为它只打开主窗口,但我更愿意只呈现GUI.
我是这样介入的:
args = [this.dcraw] + shlex.split(DCRAW_OPTS) + [rawfile]
proc = subprocess.Popen(args, -1, stdout=subprocess.PIPE)
ppm_data, err = proc.communicate()
image = Image.open(StringIO.StringIO(ppm_data))
Run Code Online (Sandbox Code Playgroud)
感谢Ricardo Reyes
次要修订到配方,在2.7看来,你需要得到STARTF_USESHOWWINDOW来自_subprocess(您也可以使用pywin32,如果你想要的东西,可能有点不太容易发生变化),所以为后人:
suinfo = subprocess.STARTUPINFO()
suinfo.dwFlags |= _subprocess.STARTF_USESHOWWINDOW
proc = subprocess.Popen(args, -1, stdout=subprocess.PIPE, startupinfo=suinfo)
Run Code Online (Sandbox Code Playgroud)