os.system和子进程调用之间的区别

我创建了一个程序,在本地服务器中创建Web架构,然后加载必要的浏览器以在本地主机上显示html和php页面。

os.system调用会os.system python进程,但不会os.system其他进程 - 例如httpd.exemysqld.exe

subprocess mysqld.exe调用会杀死httpd.exemysqld.exe程序,但会继续运行python代码,并且在subprocess mysqld.exe调用后不会执行任何代码。

我将如何去执行python代码后杀死或隐藏所有必要的进程?

这是我的代码。

os.makedirs(dr + x + '/admin' + '/css')
dobj = open(dr + x + '/admin' + '/css' + '/style.css', 'w')
dobj.close()
del dobj
os.makedirs(dr + x + '/admin' + '/js')
os.makedirs(dr + x + '/admin' + '/img')
################################################################################
## THE OS SYSTEM CALLS CLOSE THE APP BUT OPEN THE PROCESSES
## AND THE SUBPROCESS CALLS CLOSE BOTH PROCESSES AND LEAVES THE APP OPEN
## CANT WIN!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
os.makedirs(dr + x + '/admin' + '/conf')
#os.system(r'C:xamppapachebinhttpd.exe')
#os.system(r'C:xamppmysqlbinmysqld.exe')
subprocess.Popen(['C:xamppapachebinhttpd.exe'], shell=True, creationflags=subprocess.SW_HIDE)
subprocess.Popen(['C:xamppmysqlbinmysqld.exe'], shell=True, creationflags=subprocess.SW_HIDE)
webbrowser.open('localhost/' + x)
sys.exit()
################################################################################


else:
    backmaybe = raw_input('Already Exists... Try Again? (Y/N) ')
if backmaybe == 'y':
    start()
else:
    sys.exit()

之间的区别os.systemsubprocess.Popen是POPEN实际上是打开管,并os.system启动子shell,很像subprocess.call 。 Windows仅支持一些* nix操作系统的某些管道/外壳功能,但差异应该基本相同。 一个子shell不会让你像管道那样与另一个进程的标准输入和输出进行通信。

你可能想要的就是像你一样使用子进程,但是在应用程序终止之前,在管道对象上调用kill()方法(从文档)。 这将让您决定何时终止进程。 您可能需要通过调用pipe.communicate()并关闭管道的文件句柄来满足进程想要执行的任何I / O操作。

链接地址: http://www.djcxy.com/p/11395.html

上一篇: The Difference between os.system and subprocess calls

下一篇: Why do some Google Fonts displayed incorrectly in Italic style